我一直在阅读documentation here而我无法实现我所需要的地方 - 类型参数约束的重载。我在技术上"不知道如何打电话,因此我提到了#34;重载"。这是我尝试实现的一个例子:
class Test<T> {
private Test(string x) {
}
public static Test<T> OpTest(T t) {
return new Test<T>("test string") {
Value = t,
}
}
public T Value1 {get;set;}
public string X {get;set;}
}
// Sample usage
var result = Test<SomeClass>.OpTest(instanceOfSomeClass);
这就是我想要的......
//... that I can do this
var result = Test<SomeClass>.OpTest(instanceOfSomeClass);
//and also sometimes this
var anotherResult = Test<SomeClass, SomeOtherClass>
.OpTest(instanceOfSomeClass, instanceOfSomeOtherClass);
我能够通过创建另一个具有不同约束的类来实现这一点:
class Test<T, U> : Test<T> {
private Test(string x):base(x) { }
public static Test<T, U> OpTest(T t, U u) {
return new Test<T, U>("test string") {
Value1 = T,
Value2 = U,
}
}
public U Value2 {get;set;}
}
虽然这是我想要的方式,但我觉得有些不对劲。是吗?或者有更好的方法吗?此外,我只是觉得不对,但我现在必须在Test<T>
和Test<T,U>
之间复制(复制+粘贴)某些逻辑。
答案 0 :(得分:1)
干嘛写的方式:
class Test<T> {
private Test(string x) {
}
public static Test<T> OpTest(T t) {
return new Test<T>("test string") {
Value1 = t,
}
}
public T Value1 {get;set;}
public string X {get;set;}
}
class TestExtra<T, U> : Test<T> {
private TestExtra(string x) : base(x) {
}
public static TestExtra<T, U> OpTestExtra(T t, U u) {
return new Test<T>("test string") {
Value1 = t,
Value2 = u
}
}
public U Value2 {get;set;}
}
var result = Test<SomeClass>.OpTest(instanceOfSomeClass);
var anotherResult = TestExtra<SomeClass, SomeOtherClass>
.OpTestExtra(instanceOfSomeClass, instanceOfSomeOtherClass);