Trong câu trả lời cho this question Tôi đã cố gắng sử dụng Type.GetCustomAttributes(true)
trên một lớp thực hiện giao diện có Thuộc tính được xác định trên đó. Tôi đã rất ngạc nhiên khi phát hiện ra rằng GetCustomAttributes
không trả lại thuộc tính được xác định trên giao diện. Tại sao không? Không phải là một phần giao diện của chuỗi thừa kế?Trong .Net, tại sao các thuộc tính không được khai báo trên các giao diện trả lại khi gọi Type.GetCustomAttributes (true)?
Mẫu mã:
[Attr()]
public interface IInterface { }
public class DoesntOverrideAttr : IInterface { }
class Program
{
static void Main(string[] args)
{
foreach (var attr in typeof(DoesntOverrideAttr).GetCustomAttributes(true))
Console.WriteLine("DoesntOverrideAttr: " + attr.ToString());
}
}
[AttributeUsage(AttributeTargets.All, Inherited = true)]
public class Attr : Attribute
{
}
Đầu ra: Không có gì
Ok, điều đó có ý nghĩa. Tôi đã không nghĩ về việc làm thế nào để cho phép điều này giống như việc mở nhiều ổ thừa kế của giun. Câu trả lời tốt! –
Xin cảm ơn! Tôi thích trả lời các câu hỏi với nhiều câu hỏi hơn. :) – cdhowie