2012-08-31 37 views
5

Tôi muốn sử dụng sự phản chiếu để hiển thị danh sách các phương thức trong một giao diện.Cách liệt kê các phương thức giao diện bỏ qua các trình truy cập thuộc tính

public interface IRoadVehicle 
{ 
    int WheelCount { get; } 
    bool IsEmergency(); 
} 

tôi sử dụng đoạn mã sau:

foreach (var m in typeof(IRoadVehicle).GetMethods()) 
{ 
    Console.WriteLine(m.Name); 
} 

Tuy nhiên, tôi cũng được liệt kê accessors tài sản biên dịch tạo ra nếu giao diện có một tài sản. Tôi muốn phân biệt giữa các phương thức được xác định rõ ràng và các trình truy cập thuộc tính để bỏ qua phương thức sau.

//output: 
//get_WheelCount 
//IsEmergency 

//desired output: 
//IsEmergency 

Làm cách nào để lọc các phương pháp liên quan đến thuộc tính?

+0

Phương pháp lọc bắt đầu bằng get_ hoặc set_ là không đủ cho bạn? – BlueM

+3

@BlueM ai đó có thể làm điều gì đó ngớ ngẩn như tên một phương thức thực 'get_Thing()'. –

Trả lời

18

Bạn có thể sử dụng IsSpecialName tài sản:

foreach (var m in typeof(IRoadVehicle).GetMethods().Where(x => !x.IsSpecialName)) 
{ 
    // ... 
} 

này loại bỏ tất cả các phương pháp với một cái tên đó được xử lý bằng cách nào đó đặc biệt bởi trình biên dịch. Các tài liệu nói về điều này:

Bit đặc biệt được đặt để gắn cờ các thành viên được xử lý một cách đặc biệt bởi một số trình biên dịch (như truy cập thuộc tính và phương thức nạp chồng).

+0

Đó là một tài sản khá tiện dụng để biết. – SomeWritesReserved

+0

Rất đẹp. IsSpecialName là một cái gì đó tốt để biết! – BlueM

7

Làm thế nào về:

var type = typeof(IRoadVehicle); 

var accessors = type.GetProperties().SelectMany(property => property.GetAccessors()); 
var methods = type.GetMethods() 
        .Except(accessors); 

Bạn cũng có thể sử dụng IsSpecialName như Daniel Hilgarth đề cập đến, nhưng lưu ý rằng điều này cũng sẽ loại trừ khác phương pháp "đặc biệt" như các nhà khai thác (không phải là một vấn đề đối với các giao diện) và event- người truy cập. Phụ thuộc vào những gì bạn muốn, thực sự.

+0

Tidier nhiều hơn 'IsSpecialName'. – ProfK

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