Hon*_*Yan 17 c# generics constraints
我有一个包装器泛型类,旨在与一组类型一起使用.这些类型由实用程序生成,并且都是从基类ClientBase派生的.虽然ClientBase只有一个默认构造函数,但所有生成的类型都有默认构造函数,构造函数则将字符串作为参数.在包装器类的构造函数中,我使用带有字符串的构造函数实例化该类型的实例.这是一个示例代码:
public class ClientBase
{ }
public class GenericProxy<T>
where T: ClientBase, new()
{
T _proxy;
public GenericProxy(string configName)
{
_proxy = new T(configName);
}
}
Run Code Online (Sandbox Code Playgroud)
此代码无法编译,因为不保证类型T具有接受字符串的构造函数.有没有办法在泛型类上定义约束来强制类型T必须有一个带字符串的构造函数?如果这是不可能的,那么处理这种情况的好方法是什么?
Jon*_*eet 24
这是不可能的.我想看看"静态接口"来处理这个问题,但不要期待它们很快...
备择方案:
T实现接口)前两个真的是等价的.基本上你将代理类改为这样的:
public class GenericProxy<T>
where T: ClientBase, new()
{
string _configName;
T _proxy;
Func<string, T> _factory;
public GenericProxy(Func<string, T> factory, string configName)
{
_configName = configName;
_factory = factory;
RefreshProxy();
}
void RefreshProxy() // As an example; suppose we need to do this later too
{
_proxy = _factory(_configName);
}
}
Run Code Online (Sandbox Code Playgroud)
(我假设您以后想要创建更多实例 - 否则您也可以将T的实例传递给构造函数.)
| 归档时间: |
|
| 查看次数: |
1867 次 |
| 最近记录: |