Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.01.2011, 22:51   #1
vedro-compota
любитель-далеко не
Участник клуба
 
Аватар для vedro-compota
 
Регистрация: 13.04.2010
Сообщений: 1,156
По умолчанию Как в Си# передать в функцию объект по значению?

Здравствуйте, уважаемые программисты.

Насколько я знаю , имя объекта в Си# - это ссылочный тип....но тогда получается, что объект в функцию по значению передать нельзя...
прав ли я? (надеюсь ,что нет))
против абортов=за + жизнь;.фкн вгу;_______________________мойблг
vedro-compota вне форума Ответить с цитированием
Старый 16.01.2011, 23:07   #2
Lemo
Форумчанин
 
Аватар для Lemo
 
Регистрация: 13.10.2008
Сообщений: 714
Радость

В стеке хранить адрес на обьект
В управляемой куче храниться значение обьекта

<< Насколько я знаю , имя объекта в Си# - это ссылочный тип....но тогда получается, что объект в функцию по значению передать нельзя...

>> Смотря какой обьект?
Если обьект, к примеру:
Код:
int a = 5;
То его мы передаем по значению...
А такие обьекты как стринг, обьекты структур и классов передаем по ссылке.
Lemo вне форума Ответить с цитированием
Старый 17.01.2011, 11:50   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Проследи свое внимание, прыгун:
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class opa { public int i;}
    class Program
    {
        static void wow(object sender) { Console.Write(((opa)sender).i); }
        static void Main(string[] args)
        {
            opa okak=new opa();
            okak.i = 45;
            wow(okak);
            Console.ReadKey();

        }
    }
}
Уж не это ли тебе нужно?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.01.2011, 17:11   #4
vedro-compota
любитель-далеко не
Участник клуба
 
Аватар для vedro-compota
 
Регистрация: 13.04.2010
Сообщений: 1,156
По умолчанию

хм.....мне нужно строчку , например , передать по значению и , насколько я понял Лемо, это не получится сделать...
против абортов=за + жизнь;.фкн вгу;_______________________мойблг
vedro-compota вне форума Ответить с цитированием
Старый 17.01.2011, 17:26   #5
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

не верьте всему, что на форумах говорят, а верьте Console.WriteLine():

Код:
using System;

namespace test2
{
    class Program
    {
        static void foo(string param) {
            param = "lame";
        }

        static void Main(string[] args)
        {
            string value = "passed by copy of reference";
            foo(value);
            Console.WriteLine(value);
        }
    }
}
reference-type аргументы (к которым относится и string) передаются по копии ссылки, если не указан модификатор ref. Т.е. в данном случае в foo() передается указатель не на value, а указатель на ту область памяти, куда указывает value. Присвоение param = "lame"; просто меняет локальную копию указателя (param), но не value.

Со строками есть ещё неочевидная засада:

Код:
string a = "test";
string b = "test";
Console.Write (a == b); // True
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."

Последний раз редактировалось veniside; 17.01.2011 в 17:58. Причина: вроде всё )
veniside вне форума Ответить с цитированием
Старый 17.01.2011, 17:31   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Почему? Что мешает написать
Код:
static void wow(string sender) { Console.Write(sender); }
А?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.01.2011, 18:09   #7
Casper-SC
Форумчанин
 
Регистрация: 04.07.2007
Сообщений: 549
По умолчанию

Цитата:
Сообщение от Lemo Посмотреть сообщение
То его мы передаем по значению...
А такие обьекты как стринг, обьекты структур и классов передаем по ссылке.
Объекты структур мы передаём как раз по значению.
Casper-SC вне форума Ответить с цитированием
Старый 17.01.2011, 19:02   #8
Lemo
Форумчанин
 
Аватар для Lemo
 
Регистрация: 13.10.2008
Сообщений: 714
По умолчанию

Цитата:
Сообщение от Casper-SC Посмотреть сообщение
Объекты структур мы передаём как раз по значению.
Заглянул МСДН, и понял что ошибся. Да, структуры не передаються по ссылке.
Lemo вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
onkeydown. Как правильно передать в обработчику объект? Stilet JavaScript, Ajax 2 24.11.2010 13:15
Как передать объект в функцию? BadProgrammer Общие вопросы C/C++ 4 06.11.2010 11:39
Как передать в функцию указатель на String avd Общие вопросы C/C++ 6 06.06.2010 17:52
Как передать в функцию параметр разных типов borispnz Общие вопросы Delphi 5 06.02.2010 08:37
Как передать объект по наследству Legat Win Api 6 03.11.2007 11:19