Как я передаю ссылку константы в C#?

Как несколько человек, вероятно, уже ответили, интерфейсы могут использоваться для осуществления определенных поведений между классами, которые не реализуют те поведения тот же путь. Таким образом путем реализации интерфейса Вы говорите, что Ваш класс имеет поведение интерфейса. Интерфейс IAnimal не был бы типичным интерфейсом, потому что Собака, CAT, Птица, и т.д. классы являются типами животных и должны, вероятно, расширить его, который является случаем наследования. Вместо этого интерфейс был бы больше похож на поведение животных в этом случае, такое как IRunnable, IFlyable, ITrainable, и т.д.

, Интерфейсы хороши для многих вещей, одной из ключевых вещей является pluggability. Например, объявление метода, который имеет параметр Списка, будет допускать что-либо, что реализует интерфейс List, который будет передан в, позволяя разработчику удалить и включить различный список в более позднее время, не имея необходимость переписывать тонну кода.

возможно, что Вы никогда не будете использовать интерфейсы, но если Вы разработаете проект с нуля, особенно какая-то платформа, Вы, вероятно, захотите познакомиться с ними.

я рекомендовал бы читать главу по интерфейсам в Дизайн Java Coad, Mayfield и Керна. Они объясняют его немного лучше, чем средний вводный текст. Если Вы не используете Java, можно просто считать начало главы, которая является просто главным образом понятиями.

15
задан Jon Seigel 16 April 2010 в 15:50
поделиться

3 ответа

В C # нет понятия константных объектов (то есть объектов, которые вы не можете изменить); только переменные (т.е. поля) могут быть константами или только для чтения - это означает, что вы не можете назначать им.

Ключевое слово ref концептуально передает ссылку на переменную в качестве параметра, т.е. вызываемый может изменять переменную (а не просто изменять ценность). Это особенно полезно для примитивных типов (int, bool и т. Д.).

14
ответ дан 1 December 2019 в 00:18
поделиться

Чтобы ответить на исх. Часть вашего вопроса; когда вы передаете переменную методу, создается копия этой переменной. Использование ключевого слова ref передаст тот же экземпляр этой переменной, чтобы метод мог обновить эту переменную для вызывающего.

Многие люди, кажется, думают, что это применимо только к типам значений, потому что ссылочные типы просто передаются как в любом случае ссылка, поэтому ключевое слово ref не действует. Однако это не так, ссылка передается методу таким же образом, как и значение; он копируется, и создается новый экземпляр той ссылки . Это означает, что вызывающий будет видеть изменения в самом объекте, но не в ссылке. Итак, если вы попытались установить для объекта значение null или новый объект, вызывающая сторона не увидит эту модификацию, если ключевое слово ref не используется:

Без ссылки:

void UpdatePerson(Person person)
{
   // Caller would see this change
   person.Name = "Bob";
   // Caller wouldn't see this change
   person = null;
}

С ссылкой

void UpdatePerson(ref Person person)
{
   // Caller would see this change
   person.Name = "Bob";
   // Caller would see this change
   person = null;
}
23
ответ дан 1 December 2019 в 00:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: