【问题标题】:Make alias of enum in base class在基类中创建枚举的别名
【发布时间】:2019-10-12 00:16:45
【问题描述】:

可以说,我有枚举:

MyNameSpace.MyLongEnumName { Green, Red }

如何在基类(即a)中创建该枚举的简写,以便在派生类(如b)中轻松使用它?

first.cs

namespace Foo
{
    public class a
    {
        // phseudo-code,like:  
        using xx = MyNameSpace.MyLongEnumName;
    }  
}

second.cs

namespace Foo
{
    public class b : a
    {
        // phseudo-code,like: 
        xx myProperty = xx.Green;
    }  
}

附言这里的重点是避免在派生类的.cs 文件的顶部出现using ...

【问题讨论】:

  • 好吧,你不能在类声明中使用 using 这样的指令。 using 指令必须位于命名空间中(或外部)的所有其他元素(例如类或其他枚举)之前。因此,您可以将 using 指令移到 class a 声明之上,同时仍将其保留在 Foo 命名空间中。但是,是的,这对派生类的源文件没有帮助。好吧,虽然很幸运,我猜... :-(
  • var myProperty = MyNameSpace.MyLongEnumName.Green 有什么问题?我的意思是你可以把它缩短到var myProperty = MyLongEnumName.Greenusing MyNameSpace;

标签: c# enums alias


【解决方案1】:

我不太确定你想要实现什么。

例如

namespace MyCompany.MyProduct.MyServices.MyColorService.Enums
{
    public enum Color
    {
        Green,
        Red
    }
}

现在我们要使用它:

using MyCompany.MyProduct.MyServices.MyColorService.Enums;

public class Foo
{
    public void Bar()
    {
        var currentColor = Color.Green;
    }
}

比较一下:

public class Foo
{
    public void Bar()
    {
        var currentXx = xx.Green;
    }
}
  • 在第一个示例中,我立即看到它是一种颜色。绿色的那个。我也立即看到,这是我们的自定义颜色,而不是来自System.Drawing 的颜色。
  • 第二个例子,我只知道,是xx的一些green?是绿兵吗?环保吗?

无论你试图做什么,它都会让事情变得更糟。

这里的重点是避免在派生类的.cs文件顶部出现using xx = MyNameSpace.MyLongEnumName;

这不是命名空间的工作方式。命名空间在那里,以确保您与其他库没有命名冲突。它们在这里,以确保您使用您真正想要的类型进行操作。这就是为什么你的派生类也有自己的命名空间。

或者换句话说:你想要达到的目标是不可能的。即使有可能,也可能会让事情变得更糟!

Tldr:确保你组织好你的代码。在过于冗长的名称和过于简单的名称之间建立平衡。


除此之外,写Color,将光标放在它上面并按ctrl + .,然后回车。如果名称不明确,您会注意到 Visual Studio will automaticaly imports for you the namespace, 或提供列表。 我们还有像Resharper 这样的工具,它们在使用智能感知的同时导入命名空间;)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-12
    相关资源
    最近更新 更多