C# 如何以比C中的接口更宽松的方式定义模板#

C# 如何以比C中的接口更宽松的方式定义模板#,c#,oop,design-patterns,C#,Oop,Design Patterns,假设我有一组从模板生成文档的类。例如 class CustomerInvoice { public satic string TemplatePath { get { return @"C:\Templates\InvoiceTemplate.doc"; } } public static DocumentType DocumentType { get { return DocumentType.WordDocum

假设我有一组从模板生成文档的类。例如

class CustomerInvoice
{
    public satic string TemplatePath 
    { 
        get { return @"C:\Templates\InvoiceTemplate.doc"; }
    }

    public static DocumentType DocumentType 
    { 
        get { return DocumentType.WordDocument; }
    }

    public static void Create(Customer customer, int orderNumber)
    {
         //...
    }
}
所有这些类共享相同的方法名,但不一定是方法签名

例如,我可能有

CustomerInvoice.Create(Customer customer, int orderNumber);
DespatchNote.Create(Customer customer, int orderNumber, Warehouse warehouse);
PackingLabel.Create(int orderNumber);
。。。或者随便什么(努力想出合理的例子)


OO中是否有一种机制可以指定一组类的方法名称?我真的在想,只要有一种方法来实施一致的实现,并对一组相似的对象命名,这样对消费者来说就更直观了。像这样的案例是否被认为是任何此类技术的有效/有价值的使用?

不,没有这样的构想。尤其是静态方法无法强制实现任何通用性。如果is是一个接口,您可以使用类似于
Create(object)
Create(T)
(对于在通用接口上定义的某些T),并使用单个参数来表示te状态

一致的实现和命名跨一组相似的对象,因此对消费者来说更直观

既然您所说的是确保API的公共接口符合特定的系统,我不认为一定会有任何OOP构造会有所帮助

然而,可能有帮助的是用于控制样式和设计的许多工具中的任何一个。我想到了StyleCop、FxCop和NDepend,所有这些都允许创建自定义规则(痛苦程度各不相同!)。特别是,NDepend允许您按照

WARN IF Count == 0 IN SELECT METHODS WHERE NameIs "Create" AND IsStatic

如果任何特定类没有名为
Create

的静态方法(任何签名),则(应用于合适的名称空间)将发出警告。您可以使用反射检查您的类型以了解某些规则。但如果可能的话,我会选择马克建议的基于泛型的解决方案