为静态类定义全局别名

问题描述 投票:0回答:4

我有一个静态的

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
4个回答
5
投票

扩展方法

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

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

5
投票

从 C# 10 开始,您现在可以定义全局使用。

// GlobalUsing.cs
global using static WhateverNamespaceExceptionHelperLivesIn.ExceptionHelper;

现在它可以全局使用,而无需在每个类的顶部定义类名或命名空间。

// Available Globally in the Project
public class TestClass
{
    public void TestMethod()
    {
        ShowDialog("This is a message");
    }
}

3
投票

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

using static MyNamespace.ExceptionHelper;

当然不是全局的,这只适用于定义。但在使用此行的文件中,您可以使用

ExceptionHelper
的成员,无需任何前缀。


更新:

嗯,我原来的答案不太成熟。从 C# 10.0 开始,使用变得可用。它也可以与

global
结合使用,所以我原来的答案可以像这样更新:
static

它可以放在项目中的任何文件中,但建议创建一个专用文件供全局使用。

或者,您可以在 .csproj 文件中指定全局使用:

global using static MyNamespace.ExceptionHelper;

如果在 .csproj 文件中启用了 
<ItemGroup> <Using Include="MyNamespace.ExceptionHelper" Static="True"/> </ItemGroup>

,则上面的行将在默认使用也驻留在的同一个

ImplicitUsings
文件中包含您的自定义使用。
    


0
投票

obj/netversion/GlobalUsings.g.cs

© www.soinside.com 2019 - 2024. All rights reserved.