gpt4 book ai didi

c# - 这种使用泛型的模式有名称吗?

转载 作者:太空狗 更新时间:2023-10-29 17:51:07 26 4
gpt4 key购买 nike

//this class (or interface if you like) is set up as generic...
public abstract class GenericBase<T>
{
public T PerformBasicTask(T in) { ... }
}

//... but is intended to be inherited by objects that close the generic...
public class ConcreteForDates:GenericBase<DateTime>
{
public DateTime PerformSpecificTask(DateTime in) { ... }
}

//... so that consuming code never knows that a generic is involved
var myDateConcrete = new ConcreteForDates(); //look ma, no GTP!
//These two methods look alike, and there is no generic type inference,
//even with PerformBasicTask().
var basicResult = myDateConcrete.PerformBasicTask(DateTime.Now);
var specificResult = myDateConcrete.PerformSpecificTask(DateTime.Today);

//does not compile because T is understood by inheritance to be a DateTime,
//even though PerformBasicTask()'s implementation may well handle an int.
var anotherBasicResult = myDateConcrete.PerformBasicTask(1);

我已经多次看到并使用过这种模式,它对于跨一系列特定于类型的子类提供通用功能非常有用。例如,这可能是 Controller /演示器的模型,特定于一种域对象类型,该域对象是该类用于控制的页面的中心;检索/持久化等基本操作可能使用 100% 的通用功能,但绑定(bind)/解除绑定(bind)可能非常具体。

这种不向最终用户公开泛型的泛型声明模式有名称吗?

最佳答案

我相信这不是一种模式,而是 .NET Framework 的泛型类型子系统的细节,它通过用具体类型(在您的示例 DateTime 中)替换泛型类型参数来在运行时生成具体类型。关于共享共同行为的所有其他事情被称为 Inheritance

关于c# - 这种使用泛型的模式有名称吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7956460/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com