Возвращает ли указатель типа то же самое, что и «новый тип»? в с # - PullRequest
0 голосов
/ 29 сентября 2011

Вместо ...

Video v = new Video();

Я хочу сделать

Video v = GetVideo();

public Video GetVideo()
{
   return new Video();
}

Эти два вызова полностью равны?

Ответы [ 4 ]

1 голос
/ 29 сентября 2011

Они одинаковые в этом случае , потому что метод также создает новый Video. Однако рассмотрим это вместо:

private Video video;

public Video GetVideo()
{
   if (video == null)
   {
       video = new Video();
   }
   return video;
}

Теперь новый объект Video будет создан только при первом вызове - последующие вызовы вернут ссылку на существующий объект.

(Конечно, это всего лишь простой пример - иногда может создавать новый, иногда нет, иногда возвращать ноль и т. Д.)

1 голос
/ 29 сентября 2011

Возвращает ли указатель типа то же самое, что и "новый тип"?

Зависит от метода, возвращающего ссылку на объект.

Ваши данные фрагменты, например, функционально эквивалентны, потому что GetVideo() ничего не делает, кроме как возвращает new Video().

1 голос
/ 29 сентября 2011

По крайней мере, вы можете обращаться с ними как с равными, они, вероятно, будут встроены в один и тот же код IL, если они находятся в одной сборке.

1 голос
/ 29 сентября 2011

Да, они есть.Я использовал этот подход несколько раз, чтобы вернуть мне объект, предварительно заполненный некоторыми значениями тестирования по умолчанию.

...