2012-12-28 33 views
5

Tôi cần tên lớp trong một phương thức, ví dụ X. Trong khi đó, tôi không muốn mất an toàn loại và tôi sẽ không cho phép các nhà phát triển khác vượt qua chuỗi (tên lớp) cho phương thức.Nhập tên lớp an toàn vào một phương thức

Something như thế này:

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 

Trả lời

14

gì bạn đang tìm kiếm là một gọi là Type, trong đó có siêu dữ liệu về các lớp học.

Bạn có thể sử dụng phương pháp typeof(class) hoặc .GetType() trên bất kỳ phiên bản object nào.

Sự khác biệt là typeof được giải quyết tĩnh và GetType được giải quyết khi chạy.

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

X(typeof(tblEmployee)); 
+0

Vì tblEmployee là một lớp không phải là một đối tượng, X (tblEmployee.GetType()) là sai vì GetType() có thể được gọi trên các đối tượng. Thay vào đó X (typeof (tblEmployee)) là chính xác. – Alireza

+0

@Alireza Xin lỗi, tôi nghĩ đó là một ví dụ của lớp. Đã sửa. – Rotem

7

Bạn có thể sử dụng Generics và FullName property of Type, như vậy:

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

Và sau đó áp dụng contraints trên TClass theo yêu cầu của bạn.

+0

Chúng ta cần phải vượt qua Loại và không phải đối tượng. Trong trường hợp này, phương thức sẽ chấp nhận đối tượng của kiểu TClass. Tôi không điều này là những gì chúng tôi muốn ... – Gaurav

1
void X(Type type) 
{ 
    if(type == typeof(DesiredType)) 
    { 
      Do Some Action 
    } 
} 
Các vấn đề liên quan