C#从接口读取属性

示例

没有简单的方法可以从接口获取属性,因为类不会从接口继承属性。每当实现接口或重写派生类中的成员时,都需要重新声明属性。因此,在下面的示例中,True在所有三种情况下都将输出。

using System;

using System.Linq;

using System.Reflection;

namespace InterfaceAttributesDemo {

    

    [AttributeUsage(AttributeTargets.Interface, Inherited = true)]

    class MyCustomAttribute : Attribute {

        public string Text { get; set; }

    }

    

    [MyCustomAttribute(Text = "Hello from interface attribute")]

    interface IMyClass {

        void MyMethod();

    }

    

    class MyClass : IMyClass {

        public void MyMethod() { }

    }

    

    public class Program {

        public static void Main(string[] args) {

            GetInterfaceAttributeDemo();

        }

        

        private static void GetInterfaceAttributeDemo() {

            var attribute1 = (MyCustomAttribute) typeof(MyClass).GetCustomAttribute(typeof(MyCustomAttribute), true);

            Console.WriteLine(attribute1 == null); // 真正

            

            var attribute2 = typeof(MyClass).GetCustomAttributes(true).OfType<MyCustomAttribute>().SingleOrDefault();

            Console.WriteLine(attribute2 == null); // 真正

            

            var attribute3 = typeof(MyClass).GetCustomAttribute<MyCustomAttribute>(true);

            Console.WriteLine(attribute3 == null); // 真正

        }

    }

}

检索接口属性的一种方法是通过类实现的所有接口搜索它们。

var attribute = typeof(MyClass).GetInterfaces().SelectMany(x => x.GetCustomAttributes().OfType<MyCustomAttribute>()).SingleOrDefault();

Console.WriteLine(attribute == null); // 假

Console.WriteLine(attribute.Text); // 您好,来自接口属性

           

以上是 C#从接口读取属性 的全部内容, 来源链接: utcz.com/z/351355.html

回到顶部