В чем разница между myCustomer.GetType() и typeof (Customer) в С#?

Я видел, как все сделано в некотором коде, который я поддерживаю, но не знаю разницы. Есть один?

Позвольте мне добавить, что myCustomer является экземпляром Customer

Ответ 1

Результат обоих в вашем случае точно такой же. Это будет ваш настраиваемый тип, полученный из System.Type. Единственное реальное различие здесь в том, что, когда вы хотите получить тип из экземпляра вашего класса, вы используете GetType. Если у вас нет экземпляра, но вы знаете имя типа (и вам нужно только фактическое System.Type для проверки или сравнения), вы должны использовать typeof.

Важная разница

EDIT: Позвольте мне добавить, что вызов GetType разрешается во время выполнения, а typeof разрешается во время компиляции.

Ответ 2

GetType() используется для поиска фактического типа ссылки на объект во время выполнения. Это может отличаться от типа переменной, которая ссылается на объект, из-за наследования. typeof() создает литерал типа, который имеет точный тип, указанный и определяется во время компиляции.

Ответ 3

Да, есть разница, если у вас есть унаследованный тип от Клиента.

class VipCustomer : Customer
{
  .....
}

static void Main()
{
   Customer c = new VipCustomer();
   c.GetType(); // returns typeof(VipCustomer)
}

Ответ 4

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)

Ответ 5

Для первого вам нужен фактический экземпляр (т.е. myCustomer), для второго вы не

Ответ 6

typeof выполняется во время компиляции в GetType во время выполнения. Это настолько отличается от этих двух методов. Поэтому, когда вы имеете дело с иерархией типов, вы можете узнать точное имя типа, просто запустив GetType.

public Type WhoAreYou(Base base)
{
   base.GetType();
}

Ответ 7

//Оператор 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();
    }
}

// *** По Правэну Кумару Шриваставе