1

我有一个使用泛型的类。这个类做一些需要序列化的操作。因此,将赋予 myClass 的类必须包含属性 [Serializable()]。是否可以请求一个拥有它的属性的类?最好的情况是在设计时。

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

因此,如果有人使用 clsSchnappschuss,他必须给出 DataType (T),并且我想请求 T 实现 [Serializable()]。这可能吗?

问候

4

2 回答 2

4

您不能静态地请求属性的存在(即在编译时),但是在代码中您的泛型类型您可以检查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<>这将在用于每种特定类型的任何其他代码之前执行一次。

于 2013-05-27T13:04:15.480 回答
0

如果您给定的类实现了 ISerializeable 接口,您可以遵循:

public class clsSchnappschuss<T> where T : ISerializable
于 2013-05-27T13:03:59.947 回答