1

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

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

因此,当我需要创建“ThisClass”的实例时,我不必知道它的类型基础是 int 还是 Int64,但 IT 将知道类型并能够允许使用 typed 调用方法/函数...这样,如果我想将我的 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>;
    }
}
4

3 回答 3

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>;
   }
}
于 2010-03-15T19:39:45.317 回答
1

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

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

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

于 2010-03-15T19:34:54.293 回答
0

您不能按照要求执行此操作。

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

于 2010-03-15T19:43:45.877 回答