一个类可以在C#中别名吗?

时间:2010-12-13 20:13:08

标签: c# oop class interface

在命名空间中,是否可以为类提供别名?如果没有,为什么不呢?

例如,如果我有几个从包含但命名的基类派生的事物库,但想将其别名为“BaseClass”,同时保留其实际的类名(即“HtmlControl”)。

然后消费者总是可以从HtmlControls.BaseClass出现并扩展,而不必弄清楚它真正来自哪个类。

4 个答案:

答案 0 :(得分:4)

using SomeClass = Large.Namespace.Other.FunkyClass;

class Foo : SomeClass
{
}

答案 1 :(得分:1)

您可以创建一个仅继承HtmlControl的虚拟类,而不添加任何其他功能:

public class BaseClass : HtmlControl {}

答案 2 :(得分:1)

在C#/ .NET中确实没有理想的方法。你可以做的是拥有一个继承自内部类的公共BaseClass。只要类的接口保持不变,您就可以在不破坏消费者的情况下在内部更改此继承。

public class PublicBaseClass : SomeInternalClass {

}

消费者继承自PublicBaseClass,只要您小心,您可以根据需要更改SomeInternalClass

答案 3 :(得分:0)

我最接近的是定制你的使用声明:

using BaseClass = HtmlControls.BaseClass;

这通常用于避免在不同使用的命名空间中具有相同名称的类之间存在歧义,而不必完全限定其中一个或另一个。你的开发人员必须将它包含在每个代码文件中,所以对你正在做的事情来说可能不是一个好的解决方案。

至于从BaseClass派生而不知道你实际上从中得到什么,不可能。在某种程度上,编译器必须知道父类的内容和位置,这意味着它必须在代码中的某处静态定义。