问题理解方法,通用类型等之间的区别

时间:2010-09-02 14:22:08

标签: c# generics types

在下面的代码中,“Move”公共类派生自泛型类型“Submit”。 “提交”是一种方法,是DSS模型的一部分,它处理消息并接受两个参数,一个是消息体,一个是消息响应。

我的问题是:一个类是如何或为什么派生出一种方法?!

在我看来(因为我只是一个初学者)“泛型类型”意味着这个......任何方法或类(以及扩展,代码的任何“块”)都可以成为一种类型。没有类型......一切都只是一个“类”,你可以从中派生出来(但你可能不会超载字符串)

这基本上意味着实际上没有方法或类型,而只是类(和一些“子”类(前方法)),你可以从一切派生出来?!

谢谢。 我不是在寻找专家“除了这个”的衣服,其中一些小东西是不可能的。事实上,我希望确认这是程序员正在做的90%的时间。

  public class Move : Submit<MoveRequest, PortSet<DefaultSubmitResponseType, Fault>>
  {
    public Move()
    {
    }

    public Move(MoveRequest body) : base(body)
    {
    }

  }

3 个答案:

答案 0 :(得分:5)

您无法从方法派生。 Submit<T, V, E>必须是一个班级。

答案 1 :(得分:1)

不,Submit绝对不是一种方法。 Class只能从另一个类派生,或实现一个接口。因此,Submit必须是类或接口。

答案 2 :(得分:1)

稍微详细一点,提交可能是一个“动作”,因此通常被认为是一种方法,但在您的上下文中,提交确实是一个类。这可能是“命令”设计模式的一个示例,其中对操作的请求被封装在一个对象中,因此可以被处理该命令的类传递并对其起作用。

从概念上讲,泛型是能够在一组“内部”类型中提供类似功能的类。基本示例是一个Math类,可以对数字类型的两个变量进行加,减,乘和除;你知道,非常高级的数学你不能做任何其他方式。在大多数类型系统中有很多数字类型(在C#中你有byte,short,int,long,float,double和decimal,加上无符号变体)。而不是使用强定义其工作类型的方法实现MathByte,MathInt,MathLong等,或者实现与任何Object一起使用的Math类(因此需要您检查传入的所有内容的类型以确定您可以工作使用类型),您可以简单地创建一个Math<T>类,其中T可以是任何数字类型。

类型参数T与方法参数不同;声明类的实例时,指定实例将设置为要处理的类型。然后,该实例只能使用指定类型的对象,但您可以实例化Math<byte>Math<decimal>以使用不同类型。 Math中定义的方法指定类型为T的输入参数,T在实例化时使用在实例化类时声明的类型进行“替换”。

泛型有助于支持DRY(“不要重复自己”)的良好编码实践原则,同时保持类型完整性。 MathLong,MathInt,MathByte等在内部代码中都是相似或相同的;主要区别在于它们所处理的对象的类型。你可以写一个类,而不是重写同一个类10次,这个类可以由你班级的消费者更具体地定义它的工作类型。

希望这更有教育意义。