是否有可能获得类属性?c#

本文关键字:属性 有可能 是否 | 更新日期: 2023-09-27 18:15:37

我有一个使用泛型的类。这个类执行一些需要序列化的操作。所以要给myClass的类必须持有属性[Serializable()]。是否有可能请求一个类的属性它持有?在最佳情况下,在设计时。

    [Serializable()]
    public class clsSchnappschuss<T>
    {
      //Some operations which need serialization
    }

所以如果有人使用clsSchnappschuss他必须给数据类型(T),我想请求T实现[Serializable()]。这可能吗?

是否有可能获得类属性?c#

您不能静态地请求属性的存在(即在编译时),但是在您的泛型类型代码中,您可以检查T,就好像它是实际的类型名称一样。例如,您可以请求它的typeof,并从中提取属性:

public class clsSchnappschuss<T> {
    static clsSchnappschuss() {
        if (Attribute.GetCustomAttribute(typeof(T), typeof(SerializableAttribute)) == null) {
            throw new InvalidOperationException(typeof(T).FullName +" is not serializable.");
        }
    }
}

注意,我把检查放在一个静态构造函数中。这将在对每个特定类型使用clsSchnappschuss<>的任何其他代码之前执行一次。

如果你的类实现了isserializable接口,你可以这样做:

public class clsSchnappschuss<T> where T : ISerializable