引用继承类<派生类</t>中的类型

时间:2010-03-15 19:30:34

标签: c# class derived

我不知道它是否可能,但这就是我需要的东西。 我正在寻找一些东西,并想知道它是否可能,因为你不能基于密封类型(如int,Int32,Int64等)创建自己的数据类型。

我想创建一个由给定类型定义的顶级类,其中包含一些常见的东西。然后,将其派生为两个子类,但在这种情况下,每个类都基于int和Int64类型。从这个实例中,创建一个实例,并知道参数引用/返回设置的yped基础。

因此,当我需要创建“ThisClass”的实例时,我不必知道它的int或Int64的类型基础,但IT将知道类型并且能够允许调用方法/函数使用类型...这样,如果我想将我的ThisClass定义从SubLevel1更改为SubLevel2,我不必跳过所有不同的数据类型定义。

希望这有道理..

public class TopLevel<T>
{
    ... 
}

public class SubLevel1 : TopLevel<int>
{
    ...
}

public class SubLevel2 : TopLevel<Int64>
{ 
    ...
}

public class ThisClass : SubLevel1
{
    ...
    public <based on the Int data type from SubLevel1> SomeFunc()
    {  
        return <the Int value computed>;
    }
}

3 个答案:

答案 0 :(得分:2)

我假设SomeFunc应该出现在TopLevel<T>的所有子类中,所以你应该在那里定义它:

public abstract class TopLevel<T>
{
    public TopLevel()
    {
    }

    public abstract T SomeFunc();
}

并且特定的子类将知道泛型类型参数,因此ThisClass将SomeFunc定义为:

public class ThisClass : SubLevel1
{ ...
   public override int SomeFunc()
   {  
      return <the Int value computed>;
   }
}

答案 1 :(得分:1)

如果不对所有派生类进行参数化,则无法在编译时完成:

public class ThisClass<T> : SubLevel1<T> etc etc

您可以通过检查typeof(ThisClass).BaseType等在运行时通过反射执行此操作,但由于您需要编写能够理解整个基类主干的继承和泛型类型参数层次结构的代码,因此可能会非常混乱。

答案 2 :(得分:0)

你不能按照要求这样做。

但是,您可以在文件顶部写using MyType = System.Int32;,然后在文件的任何位置使用MyType。这样您就可以轻松更改类型。