2016-12-20 16 views
5

Giả sử tôi có một lớp cha và lớp con:Lấy tên của lớp khai báo?

public abstract class Parent 
{ 
    public string GetParentName() 
    { 
     return GetType().Name; 
    } 
} 

public class Child : Parent 
{ 
    public string GetChildName() 
    { 
     return GetType().Name; 
    } 
} 

Tính đến hiện tại, cả hai GetParentName()GetChildName() sẽ trở lại Child.

Tuy nhiên, trong trường hợp của tôi, tôi muốn lấy tên của lớp mà phương thức được khai báo.

Như vậy GetChildName() nên trở Child nhưng GetParentName() nên trở Chánh.

Điều này có bằng bất kỳ phương tiện nào có thể không?

LƯU Ý:.

Tôi hiểu rằng tôi có thể sử dụng GetType() BaseType.Name nhưng này sẽ không làm việc kể từ khi hệ thống phân cấp có thể là phức tạp.

+0

'Tôi muốn có được tên của lớp, trong đó phương pháp này là declared' tôi có nghĩa là họ là hai phương pháp khác nhau, 'GetChildName' * được * khai báo trong con – Jonesopolis

+2

Có thể trùng lặp của [Làm thế nào để có được tên phương thức gọi và gõ sử dụng sự phản chiếu?] (http://stackoverflow.com/questions/3095696/how-do-i-get-the-calling- phương pháp-tên-và-loại-sử dụng-phản ánh) – MethodMan

+2

Bạn chỉ có thể trả về "Phụ huynh". Cung cấp cho chúng tôi một ví dụ mà trả về một chuỗi xả rác không phù hợp. – Winter

Trả lời

6

Bạn muốn điều này, tôi nghĩ rằng:

return MethodBase.GetCurrentMethod().DeclaringType.Name; 
+0

Bạn cũng có thể sử dụng điều này, nếu bạn muốn có thể nhận được kiểu khai báo từ một nơi nào đó bên ngoài hàm đang được đề cập: typeof (Child) .GetMembers(). Đầu tiên (m => m.Name == "GetParentName") .DeclaringType.Name –

+0

Đây chính xác là những gì tôi cần - cảm ơn! –

Các vấn đề liên quan