为静态定义全局别名 类

Define global alias for static classes

我有一个静态的 ExceptionHelper,看起来像这样:

public static class ExceptionHelper
{
    public static async void ShowDialog(string message)
    {
        // Show message
    }
}

每当我想调用这个方法时,我都会这样做:

ExceptionHelper.ShowDialog("This is a message.");

我现在想为 ExceptionHelper 定义一个别名,这样每次我想使用它时都不必写出整个单词。

我知道我可以用 using:

using Ex = MyNamespaces.ExceptionHelper;

但是我必须在我想使用该方法的每个文件中定义它。有没有一种方法可以在不更改 class 的名称的情况下全局定义别名?或者我可以在 class 声明上方设置任何属性吗?

扩展方法

您可以将其作为字符串的扩展方法。

public static class ExceptionHelper
{
    public static async void ShowDialog(this string message)
    {
        // Show message
    }
}

然后你会像这样使用它:

using WhateverNamespaceExceptionHelperLivesIn;

public class TestClass
{
    public void TestMethod()
    {
        "This is a message".ShowDialog();
    }
}

这使您的问题变得毫无意义 - 您根本不必定义别名。

静态导入

另一种方法是静态导入 class。您不需要别名,因为您可以直接引用 ShowDialog 方法。这将需要 C#6/Visual Studio 2015.

using static WhateverNamespaceExceptionHelperLivesIn.ExceptionHelper;

public class TestClass
{
    public void TestMethod()
    {
        ShowDialog("This is a message");
    }
}

在 C# 6.0 中,您可以使用静态用法:

using static MyNamespace.ExceptionHelper;

当然不是全局的,它只适用于定义。但是在你使用这一行的文件中,你可以使用不带任何前缀的 ExceptionHelper 的成员。

这可能适用,即使您使用的是方法。您可以使用位于任何名称空间之外的 ENUM 类型,并以这种方式访问​​全局值。将枚举放在任何命名空间之外的文件中。您可以通过这种方式全局访问它,或者如果您遇到问题,如果您在引用它时遇到任何问题,请使用下面的 "global" 关键字:

enum Size
{
SMALL = 1,
MEDIUM = 5,
LARGE = 10
}

class Test {
    int mysize1 = (int)Size.SMALL;
    int mysize2 = (int)global::Size.MEDIUM;
}