gpt4 book ai didi

c# - 通用类型属性的任何替代解决方案?

转载 作者:太空宇宙 更新时间:2023-11-03 22:19:14 24 4
gpt4 key购买 nike

因为 we can't use generic type attributes ,有替代方案吗?也许一个例子有助于讨论:

public abstract class ErrorHandler { }
public class AccessHandler : ErrorHandler { }
public class ConnectionHandler : ErrorHandler { }
public class OtherHandler : ErrorHandler { }

public class CoHandler<T> : Attribute where T : ErrorHandler
{
public T GetHandler()
{
return default(T); // just an example
}

}
public enum Errors
{
[CoHandler<AccessHandler>()]
Access,
[CoHandler<ConnectionHandler>()]
Connection,
[CoHandler<OtherHandler>()]
Other
}

最佳答案

好吧,您可以在属性构造函数中接受类型或类型名称参数。例如

[CoHandler(typeof(AccessHandler))]

[CoHandler("[Fully or partially qualified type name]")]

前者更易于使用,而当您不想或不能依赖包含该类型的程序集时,后者很有用。

顺便说一句,return default(T); 将始终返回 null,我希望它只是为了说明目的。这是示例,如何使用类型参数:

public class CoHandler : Attribute
{
private Type _Type;

public CoHandler(Type type)
{
_Type = type;

// Use reflection to validate type argument to see if it has
// inherited from ErrorHandler and check if its has parameterless
// constructor
}

public ErrorHandler GetHandler()
{
return (ErrorHandler)Activator.CreateInstance(_Type);
}

}

关于c# - 通用类型属性的任何替代解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3827577/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com