【问题标题】:Define global alias for static classes为静态类定义全局别名
【发布时间】:2016-06-27 10:20:42
【问题描述】:

我有一个静态的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;

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

【问题讨论】:

    标签: c# static alias


    【解决方案1】:

    扩展方法

    你可以让它成为字符串的扩展方法。

    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();
        }
    }
    

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

    静态导入

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

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

    【讨论】:

      【解决方案2】:

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

      using static MyNamespace.ExceptionHelper;
      

      当然不是全局的,这只适用于定义。但是在使用此行的文件中,您可以使用ExceptionHelper 的成员,而无需任何前缀。

      【讨论】:

      • 确实如此。不过,我必须将此 using 添加到每个文件中。
      【解决方案3】:

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

      enum Size
      {
      SMALL = 1,
      MEDIUM = 5,
      LARGE = 10
      }
      
      class Test {
          int mysize1 = (int)Size.SMALL;
          int mysize2 = (int)global::Size.MEDIUM;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-31
        • 1970-01-01
        • 1970-01-01
        • 2016-08-29
        • 2015-09-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多