Интересный прикол в C#. Нельзя объявить свойство с таким же именем. что и имя класса. Следующий код завершится ошибкой:
public class UniqueDiscCode { System.String _UniqueDiscCode; public System.String UniqueDiscCode { get { return _UniqueDiscCode; } set { _UniqueDiscCode = value; } } }
Но ведь с точки зрения IL кода проблем не должно быть, ведь имена свойств отличаются от имен классов. Да и следующий хак позвоялет легко обойти такое простое ограничение:
public class DiscCodeBase { System.String _UniqueDiscCode; public System.String UniqueDiscCode { get { return _UniqueDiscCode; } set { _UniqueDiscCode = value; } } } public class UniqueDiscCode : DiscCodeBase
{ public void test() { UniqueDiscCode = ""; } }
Сначала я создал класс с префиксом Base, у которого есть свойство UniqueDiscCode, а потом создал класс UniqueDiscCode, который наследует одноименное свойство. И никаких проблем с конфликтом имен нет.
Возникает тогда вопрос - так почему же нельзя сразу же объявить свойство с таким же именем, что и класс? Видимо есть какая-то причина, но пока не понятно, в чем она заключается.
Понравилось? Кликни Лайк, чтобы я знал, какой контент более интересен читателям. Заметку пока еще никто не лайкал и ты можешь быть первым
имена членов не могут совпадать с типами, в которые они входят
Как-то пример у вас не очень удачный получился, не отражает он сути вопроса. "UniqueDiscCode" != "DiscCode" :). Но посыл ясен
Думаю это особенность c# компилятора, как и отсутствие глобальных переменных, и если писать на чистом CIL, то все можно. Более того скажу, что попробовал то же самое в f#, компилятор не ругает, все работает. Походу просто создателям C# такой код кажется не красивым и они решили запретить данную возможность.
А вот еще две не совсем очевидные вещи, о которых можно догадаться, но наверняка лучше проверить:
что будет выведено в консоль?
Я думаю это сделано чтоб не было двусмысленности и путаницы так как конструктор создаётся с таким же именем как и у класса.
Хотите найти еще что-то интересное почитать? Можно попробовать отфильтровать заметки на блоге по категориям.