在下面的代码中,“Move”公共类派生自泛型类型“Submit”。 “提交”是一种方法,是DSS模型的一部分,它处理消息并接受两个参数,一个是消息体,一个是消息响应。
我的问题是:一个类是如何或为什么派生出一种方法?!
在我看来(因为我只是一个初学者)“泛型类型”意味着这个......任何方法或类(以及扩展,代码的任何“块”)都可以成为一种类型。没有类型......一切都只是一个“类”,你可以从中派生出来(但你可能不会超载字符串)
这基本上意味着实际上没有方法或类型,而只是类(和一些“子”类(前方法)),你可以从一切派生出来?!
谢谢。 我不是在寻找专家“除了这个”的衣服,其中一些小东西是不可能的。事实上,我希望确认这是程序员正在做的90%的时间。
public class Move : Submit<MoveRequest, PortSet<DefaultSubmitResponseType, Fault>>
{
public Move()
{
}
public Move(MoveRequest body) : base(body)
{
}
}
答案 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次,这个类可以由你班级的消费者更具体地定义它的工作类型。
希望这更有教育意义。