Re: C#
От: Gena_Popov  
Дата: 28.06.04 08:27
Оценка: 9 (1)
Здравствуйте, Аноним, Вы писали:


А>По идее при вызове статического метода проверка должна проходить, но этого не происходит и ссылки оказываются разными. Так и должно быть?



Все должно быть именно так.
Если ты заменишь в своем методе int на object (а так же тип передаваемого объекта), то ReferenceEquals вернет true.
А в твоем случае метод ReferenceEquals возвращает false т.к. перед передачей в метод, происходит боксинг параметров,
и в тело функции попадают уже разные объекты.

Этот код вернет "!Equals".
            int i = 5;
            if (object.ReferenceEquals(i, i))
                MessageBox.Show("Equals");
            else
                MessageBox.Show("!Equals");
C#
От: Аноним  
Дата: 27.06.04 20:00
Оценка:
Здравствуйте, у меня есть два вопроса по C#:

1.При отсутствии модификатора для параметра метода (т.е. по умолчанию подразумевается in) значения при вызове метода передаются по значению. При модификаторе ref — по ссылке. А как при out? Как я понимаю ведь тоже должна происходить передача по ссылке?

2. Предположим, что у нас есть следующий код:


    class MyClass
    {
        public static void func(ref int oi, ref int ri)
        {
            if (object.ReferenceEquals(oi, ri))
                System.Console.WriteLine("References are equal.");
            System.Console.WriteLine("References are NOT equal.");
        }
        static void Main(string[] args)
        {
            int i1 = 100;
            MyClass.func(ref i1, ref i1);
        }
    }


По идее при вызове статического метода проверка должна проходить, но этого не происходит и ссылки оказываются разными. Так и должно быть?
Re: C#
От: pvnic  
Дата: 28.06.04 06:49
Оценка:
А> if (object.ReferenceEquals(oi, ri))
А> System.Console.WriteLine("References are equal.");
А> System.Console.WriteLine("References are NOT equal.");

сдается мне, вторая строчка всегда пишется...
Re: C#
От: Evgeni Россия altay2003.by.ru
Дата: 28.06.04 06:52
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, у меня есть два вопроса по C#:


А>1.При отсутствии модификатора для параметра метода (т.е. по умолчанию подразумевается in) значения при вызове метода передаются по значению. При модификаторе ref — по ссылке. А как при out? Как я понимаю ведь тоже должна происходить передача по ссылке?


В общем и целом да, но не совсем. Если все старые (полученные до входа в процедуру, метод) значения переменной с модификатором out будут удалены. И эта переменная _обязательно_ должна получить значение в методе.

А>2. Предположим, что у нас есть следующий код:



А>
А>    class MyClass
А>    {
А>        public static void func(ref int oi, ref int ri)
А>        {
А>            if (object.ReferenceEquals(oi, ri))
А>                System.Console.WriteLine("References are equal.");
А>            System.Console.WriteLine("References are NOT equal.");
А>        }
А>        static void Main(string[] args)
А>        {
А>            int i1 = 100;
А>            MyClass.func(ref i1, ref i1);
А>        }
А>    }
А>


А>По идее при вызове статического метода проверка должна проходить, но этого не происходит и ссылки оказываются разными. Так и должно быть?


System.Console.WriteLine("References are NOT equal."); будет выполняться ВСЕГДА (или это ошибка именно в примере?). При использовании модификатора ref передается копия ссылки, указывающая на один объект
Re: C#
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 28.06.04 09:45
Оценка:
Здравствуйте, <Аноним>, Вы писали:


А>По идее при вызове статического метода проверка должна проходить, но этого не происходит и ссылки оказываются разными. Так и должно быть?

А боксинг ты учитываешь????
object.ReferenceEquals сравнивает объекты а не value типы.
... << RSDN@Home 1.1.0 stable >>
и солнце б утром не вставало, когда бы не было меня
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.