GetType
- это виртуальный метод, который дает вам динамический тип объекта.
Я думаю, вы хотите статический тип переменной. Вы не можете получить это, вызвав метод объекта, на который ссылается переменная. Вместо этого просто напишите typeof(TypeName)
, что в вашем случае равно typeof(One)
или typeof(Two)
.
В качестве альтернативы в вашем подклассе вы можете использовать новый метод, который скрывает оригинальный вместо того, чтобы переопределять его:
class One
{
public string MyGetType() { return "One"; }
}
class Two : One
{
public new string MyGetType() { return "Two"; }
}
class Program
{
private void Run()
{
One obj1 = new One();
Two obj2 = new Two();
obj1 = obj2;
Console.WriteLine("obj1.GetType(): " + obj1.GetType());
Console.WriteLine("obj2.GetType(): " + obj2.GetType());
Console.WriteLine("obj1.MyGetType(): " + obj1.MyGetType());
Console.WriteLine("obj2.MyGetType(): " + obj2.MyGetType());
}
}
Результат:
obj1.GetType(): Two
obj2.GetType(): Two
obj1.MyGetType(): One
obj2.MyGetType(): Two