繁体   English   中英

类型参数的约束,可以有一个可选类型

[英]Constraints on Type Parameters, can there be an optional type

我一直在阅读这里文档 ,我无法得到我能够实现我需要的东西 - 类型参数约束的重载。 我“技术上”不知道如何调用它因此我提到“过载”。 这是我想要实现的一个例子:

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>之间复制(复制+粘贴)一些逻辑。

干的方式来写它:

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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM