Модификатор доступа public
помечает тип и член типа как доступные из внешних библиотек.Это означает, что если у вас есть тип в сборке A, и вы добавляете ссылку на него из сборки B, это означает, что вы можете получить доступ к этому типу / члену из типов, представленных в сборке B. Есть и другие модификаторы доступа (читайте о них here ).
Знание того, как модификаторы доступа изменяют поведение типов, является важной частью объектно-ориентированного проектирования.
virtual
члены позволяют типу предоставлять реализацию по умолчанию дляконкретный функционал.Например, если бы у меня был тип:
public class Logger {
protected virtual void Write(string message) {
Console.Write(message);
}
}
, я мог бы иметь тип:
public class DebugLogger : Logger {
}
Этот тип будет представлять мою реализацию по умолчанию Write
как метод Logger.Write
,Я мог (необязательно) переопределить это поведение:
public class DebugLogger : Logger {
protected override void Write(string message) {
Debug.Print(message);
}
}
Использование этого использования virtual
/ override
позволяет классам необязательно настраивать свое поведение, а когда Write
вызывается со ссылкой, простой дляLogger
экземпляр, будет вызвана правильная реализация (так, переопределенный метод в последнем случае).
private
члены используются, чтобы содержать члены, которые не должны быть представлены вне родительского типа.Например, вспомогательное поле для свойства почти всегда будет закрытым.
Общее правило, которому я следую, таково:
public
члены предоставляют специфическую функциональность, которую я хочу использовать из внешних типов./assemblies. protected
члены предоставляют специфическую функциональность, которую я хочу использовать только для наследования типов. private
члены скрывают функциональность, которую я хочу содержать, только для родительского типа.Например, я хочу использовать метод, который специфичен для данного типа и не имеет никаких преимуществ для публичного показа.Например, методы мутации состояния, которыми я хочу управлять из внешнего доступа и т. Д.
Другие:
internal
позволяет мне помечать элементы как доступные только в сборке, котораясодержит их.Это полезно, когда вам нужно раскрыть такие вещи, как методы компоновщика и т. Д., Которые относятся к конкретной сборке, которые вы не хотите отмечать как публичные, но не можете использовать в качестве закрытых элементов. - Я редко использую
protected internal
.
Надеюсь, это поможет!