Будет ли GetType() возвращать наиболее производный тип при вызове из базового класса?
будет ли GetType() возвращать наиболее производный тип при вызове из базового класса?
пример:
public abstract class A
{
private Type GetInfo()
{
return System.Attribute.GetCustomAttributes(this.GetType());
}
}
public class B : A
{
//Fields here have some custom attributes added to them
}
или я должен просто сделать абстрактный метод, который производные классы должны будут реализовать следующим образом?
public abstract class A
{
protected abstract Type GetSubType();
private Type GetInfo()
{
return System.Attribute.GetCustomAttributes(GetSubType());
}
}
public class B : A
{
//Fields here have some custom attributes added to them
protected Type GetSubType()
{
return GetType();
}
}
3 ответа:
GetType()возвращает фактический, созданный экземпляр типа. В вашем случае, если вы позвонитеGetType()на примереB, он вернетсяtypeof(B), даже если рассматриваемая переменная объявлена как ссылка наA.нет никаких причин для вашего
GetSubType()метод.
GetTypeвсегда возвращает тип, который был фактически создан. т. е. наиболее производный тип. Это означает, что вашGetSubTypeведет себя так же, какGetTypeсам по себе и при этом не нужен.чтобы статически получить информацию о типе некоторого типа, вы можете использовать
код ошибки:typeof(MyClass).System.Attribute.GetCustomAttributesвозвращаетAttribute[]неType.
GetType всегда возвращает фактический тип.
причина этого находится глубоко в.NET framework и CLR, как JIT и CLR использовать
.GetTypeметод для создания объекта типа в памяти, который содержит информацию об объекте, и все доступ к объекту и компиляции через этот экземпляр типа.для получения дополнительной информации загляните в Книгу "CLR via C#" от Microsoft Press.