Я видел, как все сделано в некотором коде, который я поддерживаю, но не знаю разницы. Есть один?
Позвольте мне добавить, что myCustomer является экземпляром Customer
Я видел, как все сделано в некотором коде, который я поддерживаю, но не знаю разницы. Есть один?
Позвольте мне добавить, что myCustomer является экземпляром Customer
Результат обоих в вашем случае точно такой же. Это будет ваш настраиваемый тип, полученный из 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)
Для первого вам нужен фактический экземпляр (т.е. myCustomer), для второго вы не
typeof выполняется во время компиляции в GetType во время выполнения. Это настолько отличается от этих двух методов. Поэтому, когда вы имеете дело с иерархией типов, вы можете узнать точное имя типа, просто запустив GetType.
public Type WhoAreYou(Base base)
{
base.GetType();
}
//Оператор typeof принимает тип в качестве параметра. Он разрешается во время компиляции.
//The GetType method is invoked on an object and is resolved at run time.
//The first is used when you need to use a known Type, the second is to get
// the type of an object when you don't know what it is.
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();
}
}
// *** По Правэну Кумару Шриваставе