我希望变量只包含继承特定抽象的类的类型。在此示例中,变量“ MyLetter”应该仅包含类型LetterA,LetterB或任何继承LetterAbstract的类型。

我将如何完成?

abstract class LetterAbstract
{
    public char Letter;
}

class LetterA : LetterAbstract
{
    void LetterA()
    {
        Letter = 'A';
    }
}

// valid
TLetterAbstract MyLetter = typeof(LetterA);

// invalid
TLetterAbstract MyLetter = typeof(string);

最佳答案

在这种情况下,您需要使用数据类型LetterAbstract声明变量(所谓的基类)。

LetterAbstract letter;

letter = new LetterA(); // valid
letter = "asdasd"; // invalid


我认为您需要先阅读有关继承的内容,请参阅“ Inheritance (C# Programming Guide)”。

:编辑

关于


  我不想要LetterA的实例。我想要类类型LetterA。


您可以使用泛型来摆弄一些东西,但我不知道用例可能是什么:

class TypeVar<A>
  where A: LetterAbstract
{
  public void SetValue<B>()
    where B: A
  {
    mValue = typeof(B);
  }

  public System.Type GetValue()
  {
    return mValue;
  }

  private System.Type mValue;
}

var x =new TypeVar<LetterAbstract>();
x.SetValue<LetterA>(); // valid
x.SetValue<string>(); // invalid
x.GetValue(); // get the type

10-06 14:47