В чем разница между myCustomer.GetType () и typeof(Customer) в C#?
Я видел, как это делается в каком-то коде, который я поддерживаю, но не знаю разницы. Есть ли такой?
позвольте мне добавить, что myCustomer является экземпляром Customer
7 ответов:
результат точно такой же в вашем случае. Это будет ваш пользовательский тип, производный от
System.Type
. Единственное реальное различие здесь заключается в том, что когда вы хотите получить тип из экземпляра класса, вы используетеGetType
. Если у вас нет экземпляра, но вы знаете имя типа (и просто нужно фактическоеSystem.Type
чтобы проверить или сравнить), вы должны использоватьtypeof
.важным отличием
EDIT: позвольте мне добавить, что вызов
GetType
решается во время выполнения, в то время какtypeof
разрешена во время компиляции.
GetType () используется для поиска фактический тип ссылки на объект во время выполнения. Это может отличаться от типа переменной, которая ссылается на объект, из-за наследования. typeof () создает литерал типа, который имеет точно указанный тип и определяется во время компиляции.
Да, есть разница, если у вас есть наследственная типу от клиента.
class VipCustomer : Customer { ..... } static void Main() { Customer c = new VipCustomer(); c.GetType(); // returns typeof(VipCustomer) }
typeof (foo) преобразуется в константу во время компиляции. foo.GetType () происходит во время выполнения.
typeof (foo) также преобразуется непосредственно в константу своего типа (т. е. foo), поэтому это не удастся:
public class foo { } public class bar : foo { } bar myBar = new bar(); // Would fail, even though bar is a child of foo. if (myBar.getType == typeof(foo)) // However this Would work if (myBar is foo)
typeof выполняется во время компиляции, а GetType-во время выполнения. Вот что так отличается от этих двух методов. Вот почему, когда вы имеете дело с иерархией типов, вы можете узнать точное имя типа типа, просто запустив GetType.
public Type WhoAreYou(Base base) { base.GetType(); }
оператор typeof принимает тип в качестве параметра. Он решается во время компиляции. Метод GetType вызывается для объекта и разрешается во время выполнения. Первый используется, когда вам нужно использовать известный тип, второй-чтобы получить тип объекта, когда вы не знаете, что это такое.
class BaseClass { } class DerivedClass : BaseClass { } class FinalClass { static void RevealType(BaseClass baseCla) { Console.WriteLine(typeof(BaseClass)); // compile time Console.WriteLine(baseCla.GetType()); // run time } static void Main(string[] str) { RevealType(new BaseClass()); Console.ReadLine(); } } // ********* By Praveen Kumar Srivastava