1 и 2 конфликт, в основном.
Либо ваш тип является неизменным, и в этом случае вы можете каждый раз возвращать ссылку на один и тот же экземпляр ... или он может изменяться, и в этом случае у вас есть , чтобы каждый раз возвращать ссылку на новый объект время.
Причина, по которой string.Empty
в порядке, заключается именно в том, что string
является неизменным.
Может ли ваш тип иметь быть изменяемым?
РЕДАКТИРОВАТЬ: Исходя из вашего комментария, кажется, что свойства не должны иметь сеттеры вообще. Вместо этого значения должны быть переданы в конструктор и сохранены в полях только для чтения.
В этот момент ваш тип является неизменным, поэтому вы можете предоставить либо открытое поле, либо свойство, которое всегда возвращает одно и то же значение, т.е.
private static readonly MyType empty = new MyType("", ""); // Or whatever
public static MyType Empty { get { return empty; } }
или
public static readonly MyType Empty = new MyType("", "");
Вам не нужно беспокоиться о том, чтобы кто-то устанавливал какие-либо свойства, потому что у вас нет сеттеров ...