Comments 11
Феерическая терминологическая каша.
Нет, основная причина сохранения информации о типах вплоть до времени выполнения — это то, что код управляемый, а для управления нужна информация. Ну и reflection во всех его проявлениях — очень удобен.
Нет. Каждый объект — это объект (определенного типа, конечно же). Он не поле, он объект. Поле может содержать ссылку на объект (для ссылочных типов), или сам объект (для типов-значений при определенных условиях).
А вот и нет. Они имеют один и тот же тип —
Оба вызова вернут одно и то же. А чтобы получить
Тоже нет. Атрибуты есть у типов, у членов типов, у параметров и возвращаемых значений методов и даже у сборок.
А вот у объектов никаких атрибутов нет.
основная причина юзанья атрибутов с типами — PropertyGrid, бывший TValueListEditor.
Нет, основная причина сохранения информации о типах вплоть до времени выполнения — это то, что код управляемый, а для управления нужна информация. Ну и reflection во всех его проявлениях — очень удобен.
Каждый объект имеет две ипостаси: с одной стороны он есть поле какого то типа, а с другой стороны он сам имеет свой тип, в котором могут быть разные поля.
Нет. Каждый объект — это объект (определенного типа, конечно же). Он не поле, он объект. Поле может содержать ссылку на объект (для ссылочных типов), или сам объект (для типов-значений при определенных условиях).
Оказывается у каждого объекта свой собственный уникальный тип. Иначе говоря, две переменные типа int имеют два разных типа.
А вот и нет. Они имеют один и тот же тип —
typeof(int)
.class X
{
class ATTR1 : Attribute { public ATTR1() { } }
class ATTR2 : Attribute { public ATTR2() { } }
class A
{
[ATTR1]
public int i1;
[ATTR2]
public int i2;
}
X()
{
object[] ai1 = a.i1.GetType().GetCustomAttributes(false);
object[] ai2 = a.i2.GetType().GetCustomAttributes(false);
}
}
Оба вызова вернут одно и то же. А чтобы получить
[ATTR1]
и [ATTR2]
, надо запрашивать атрибуты у FieldInfo
.атрибуты только у типов.
Тоже нет. Атрибуты есть у типов, у членов типов, у параметров и возвращаемых значений методов и даже у сборок.
Чтобы использовать атрибуты их сперва нужно найти у объекта.
А вот у объектов никаких атрибутов нет.
Пример поправил. Строгая терминология полезна тем, кто знает C#, но им совершенно бесполезна моя статья. А вот тем, кто не знает терминов шарпа, а писал на плюсах, например, в самый раз. Вы наверное изволили заметить, что статья весьма коротка и не включает ничего. Зато писать уже можно.
Пример поправил.
… и как же вы теперь обосновываете свое заявление «две переменные типа int имеют два разных типа»?
А вот тем, кто не знает терминов шарпа, а писал на плюсах, например, в самый раз.
Зачем загаживать людям мозги ошибочной информацией?
Зато писать уже можно.
Но не нужно.
Писать совершенные, взвешенные и продуманные суждения означает не писать ничего и никогда. Так устроен этот мир.
Атрибут принадлежит типу, и если типы различаются списком атрибутов — значит они различны. Здесь кроется большая опасность, так как нужно думать когда атрибут выполняется — он ведь исполняемый класс в отличие от типа. Полагаю что шарповцы не смогли исключить все ошибки и далее не смогут.
Атрибут принадлежит типу, и если типы различаются списком атрибутов — значит они различны. Здесь кроется большая опасность, так как нужно думать когда атрибут выполняется — он ведь исполняемый класс в отличие от типа. Полагаю что шарповцы не смогли исключить все ошибки и далее не смогут.
Атрибут принадлежит типу
Да нет же, с чего вы это взяли? Атрибут может принадлежать как типу, так и члену типа, параметру и возвращаемому значению, и сборке целиком.
если типы различаются списком атрибутов — значит они различны
А где вы видите, что типы различаются списком атрибутов? Покажите конкретный пример кода и его вывод.
Экий вы право же продвинутый. Я сознательно написал «переменная», что вообще говоря в терминах шарпа совсем никак. А потом долго описывал какие то ипостаси, которые так же никак, и связывал объект с типом внешним и внутренним на этапе выполнения, хотя нет ни внешних, ни внутренних типов. И писал про дырявые представления — т.е. изначально неверные представления. Чисто для понимания, а вовсе не для документирования. А вы, как я полагаю, решили блеснуть глубиной знаний шарпа, не так ли?
Я сознательно написал «переменная», что вообще говоря в терминах шарпа совсем никак.
Почему «никак»? В C# есть переменные.
Чисто для понимания, а вовсе не для документирования.
Не надо «для понимания» писать изначально неверные вещи.
Тип int никак не изменился от того, что у поля класса A есть атрибут ATTR1
это прорыв udaff.com на хабр?
Конечно, исходник проги однозначно ее определяет, но вот прочитать его никак нельзя, если он чуть больше страницы. Для описания программы поневоле приходится использовать литературно-художественные понятия, такие как виртуальность, метод доступа, драйвер, интерфейс… которые вообще говоря ничего определенного не обозначают, или обозначают все что угодно.
Sign up to leave a comment.
С# aтрибуты и типы