2015-11-10 4 views
4

У меня есть класс под названием SerializableString, который расширяет базовый класс CustomXmlSerializable. Базовый класс предоставляет методы для сериализации и десериализации производного класса XML.Можно ли назвать эту строку «String» опасной или плохой практикой?

public class SerializableString : CustomXmlSerializable 
{ 
    public string String { get; set; } 
} 

Очевидно, что я могу назвать string свойством, что я хочу. Но поскольку этот класс является настолько общим по своей природе, было бы неплохо дать ему очень очевидное имя, например «String». Таким образом, объект доступен как:

SerializableString userName = new SerializableString(); 
userName.String = "khargoosh"; 

Этот компилятор допускает это. Невзирая на характер класса и собственности, было бы ли это плохой практикой или опасным, чтобы дать одно и только свойство в классе имени «String»?

+4

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

+2

P.S. «khargoosh» означает «кролик» на фарси, если кто-то задавался вопросом :) – PoweredByOrange

+1

Это тоже мое чувство. Но я хотел бы узнать, может ли (и почему) это быть опасным. +1 для перевода !!! – khargoosh

ответ

4

Не делайте этого , хотя он действителен в отношении компилятора. Пример Эрика Липперта Color Color отличается - большинство вещей редко имеют более одного свойства цвета, поэтому присвоение имени Color обычно сообщает вам все, что вам нужно знать об этом свойстве. Я называю это действительным случаем, когда использование имени типа (Color) подходит для использования в качестве имени свойства. (Можно было бы утверждать, является ли это хорошим аргументом, но в прошлом мне приходилось иметь дело с этой точной проблемой и в конечном итоге использовало Color Color.)

В случае string String вы ничего не узнали от названия объекта - данный объект может иметь (и объекты часто) несколько свойств типа string. Именование свойства String ничего не говорит о цели этого свойства. Это затрудняет понимание кода.

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

Специально для этого вопроса, я бы назвал свойство Value:

public string Value { get; set; } 
+2

Я не хочу спорить, пожалуйста, помогите мне понять вашу мысль. Кажется, это семантический аргумент - как строка 'string' называется String иначе, чем' Color' под названием Color? Единственная цель «SerializableString» - быть единственной String. Единственное предполагаемое использование этой строки - это строка. Не следует ли включать функциональную информацию в имя экземпляра этого класса? – khargoosh

+0

'public void ValidateNameFieldRemainsIntactIfNotProvidedOMGThisMethodNameIsSoLongSomeoneShootMe() {}' :) – PoweredByOrange

+0

@PoweredByOrange Что вы думаете? – xxbbcc

1

Как говорит сам Эрик Липперт here, это «совершенно приемлемая практика, язык C# был тщательно разработан, чтобы это было законным и практичным».

Кроме того, в этом случае кажется однозначным то, что означает ваше свойство String: у вас есть класс, который похож на строку, но сериализуется, и это свойство возвращает основную строку. Предположим, что String не был примитивным типом, а примитивный тип был str или что-то в этом роде. Тогда мне не кажется, что возникнет какая-либо проблема или двусмысленность при вызове этого свойства (центральное свойство вашего класса) просто «String» (с возвратом типа str в моем гипотетическом случае)

+1

Этот ответ относится к свойствам, названным по типу в целом, - я сомневаюсь, что он будет так признавать свойство, названное в честь примитивного типа. –

+1

Есть много различий в C# между примитивными типами и другими? – McDuffin

+1

И на самом деле один из вопросов Эрик [ссылки на] (http://stackoverflow.com/questions/1746117/why-is-it-possible-to-have-properties-named-the-same-as-their- return-types) относится к примеру с примитивным типом – McDuffin

Смежные вопросы