gre*_*man 46 c# generics constructor
是不支持,是否支持,但我必须做一些技巧?
例:
class Foo
{
public Foo<T1,T2>(Func<T1,T2> f1,Func<T2,T1> f2)
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
泛型只在构造函数中使用,没有依赖于它们的字段/属性,我使用它(泛型)来强制执行f1和f2的类型相关.
备注:我找到了解决方法 - 静态方法创建,但无论如何我很好奇为什么我有直接方法的问题.
Jon*_*eet 71
不,通用构造函数在泛型或非泛型类中都不受支持.同样,不支持通用事件,属性和终结器.
偶尔我同意它会很方便 - 但语法看起来很糟糕.例如,假设你有:
public class Foo<T> {}
public class Foo
{
public Foo<T>() {}
}
Run Code Online (Sandbox Code Playgroud)
什么会
new Foo<string>()
Run Code Online (Sandbox Code Playgroud)
做?调用非泛型类的泛型构造函数,还是泛型类的普通构造函数?你必须以某种方式区分它们,它会很混乱:(
同样,考虑泛型类中的泛型构造函数:
public class Foo<TClass>
{
public Foo<TConstructor>() {}
}
Run Code Online (Sandbox Code Playgroud)
你怎么称呼构造函数?希望我们都同意:
new Foo<string><int>()
Run Code Online (Sandbox Code Playgroud)
很可怕......
所以是的,在语义上它偶尔会有用 - 但不幸的是,由此产生的丑陋抵消了这种情况.
Pet*_*der 24
不支持通用构造函数,但您可以通过简单地定义static返回new 的泛型方法来解决这个问题Foo:
class Foo
{
public static Foo CreateFromFuncs<T1,T2>(Func<T1,T2> f1,Func<T2,T1> f2)
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
这是这样使用的:
// create generic dependencies
var func1 = new Func<byte, string>(...);
var func2 = new Func<string, byte>(...);
// create nongeneric Foo from dependencies
Foo myFoo = Foo.CreateFromFuncs<byte, string>(func1, func2);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
26557 次 |
| 最近记录: |