使用空父类只是为了分组其他类。有更好的方法吗?

时间:2009-04-30 15:08:26

标签: c# oop coding-style

我有几个概念上属于一个层的类。它们没有共同属性,这就是为什么它们不需要从某个基类继承。

我也有一些处理这些类的方法。其中一些是以下样式的模板:

public SomeClass
{
    public void SomeMethod<T> (T argument) where T : BaseClass
    {
        /* Do something */
    }
}

所以我正在使用这个WHERE关键字来保护代码(我自己认为是这样),所以我不会错误地将这个方法提供给其他东西。

当然,我让其他类派生自BaseClass,它是空的,没有其他目的(至少现在),而不是分组其他类。

这可能不是那么好的方法,但无论如何我都在使用它。

有更好的方法吗?

编辑:经过考虑后,我决定不采用这种方法,只是删除了那个基类。没有它就足够了。无论如何,我无法使代码绝对完美,而且不太需要的东西就越好。

3 个答案:

答案 0 :(得分:7)

使用标记(空)接口而不是基类:

public void SomeMethod<T> (T argument) where T : ISomeInterface

答案 1 :(得分:2)

杰夫的回答+1。标记(“标记”)接口在C#和Java框架中都很常见。它们允许您为“A类”分配一个公共类型,以便另一个类(“B类”)可以忽略A类的具体类型。

与任何这种灵活的东西一样,它很容易被滥用,但在你的情况下它肯定会填补这笔费用。

答案 2 :(得分:0)

也许一个更具体的例子可以提供更多的视角。按照目前的情况,我会说你不应该以这种方式分组。

你的SomeMethod()方法显然没有引用参数的任何属性(如果是,它也必须将参数转换为不同的类型);保护代码“自己”的原因是什么?如果您要调用传入未批准对象的方法,会发生什么?

如果参数约束是绝对必要的,我建议像Grybyx那样使用接口。这将使您免于多重继承的问题。