2012-12-28 10 views
5

Potrzebuję nazwy klasy w metodzie np. X. Tymczasem nie chcę stracić bezpieczeństwa typu i nie pozwolę innym programistom ciąg (nazwa klasy) do metody.Bezpiecznie wpisz nazwę klasy do metody

coś takiego:

void X(??? class) // --> don't know how 
{ 
var className = get the name of class // --> which I don't know how 
Console.WriteLine(className); 
} 

X(tblEmployee); //--> usage of X, where tblEmployee is a POCO class 

Odpowiedz

14

Co szukasz jest nazywany Type, który zawiera metadane dotyczące klas.

Możesz użyć metody typeof(class) lub .GetType() na dowolnej instancji object.

Różnica polega na tym, że typeof został statycznie rozdzielony, a GetType rozwiązany w czasie wykonywania.

void X(Type type) 
{ 
    Console.WriteLine(type.FullName); 
} 

X(typeof(tblEmployee)); 
+0

Od tblEmployee to nie obiekt klasy X (tblEmployee.GetType()) jest błędne, ponieważ GetType() może być wywołana na obiektach. Zamiast tego X (typeof (tblEmployee)) jest poprawny. – Alireza

+0

@Alireza Przepraszam, myślałem, że to był przykład klasy. Naprawiony. – Rotem

7

Można użyć rodzajowych i FullName property of Type jako takie:

void WriteClassName<TClass>(TClass item) 
    where TClass : class { 
    Console.WriteLine(item.GetType().FullName); 
} 

a następnie zastosować contraints na TClass jak na swoje wymagania.

+0

Musimy przekazać Typ, a nie obiekt. W takim przypadku metoda zaakceptuje obiekt typu TClass. Nie sądzę, że tego chcemy ... – Gaurav

1
void X(Type type) 
{ 
    if(type == typeof(DesiredType)) 
    { 
      Do Some Action 
    } 
} 
Powiązane problemy