【问题标题】:How can I make a C# "using" alias public to avoid "inconsistent accessibility" errors?如何使 C#“使用”别名公开以避免“不一致的可访问性”错误?
【发布时间】:2013-03-14 07:50:24
【问题描述】:

我有一个 C# 类,它使用 using 关键字为一些公共属性定义了一些别名。这会导致“不一致的可访问性”编译器错误,因为别名定义的类型显然不是公共的。如何将别名定义的类型也公开,以便错误消失?

// Alias defined at the top of the source file just below the other "using"
//  "using" statements that bring in the needed modules.
using TDynamicStringArray = System.Collections.Generic.List<string>;

// Public property defined with the type alias.
public TDynamicStringArray Strs
{
    ...
}

这是从编译器收到的错误:

Error   2   Inconsistent accessibility: property type 'TDynamicStringArray' is less accessible than property 'Strs'

我尝试将 public 放在 using 前面,但这不起作用。我查看了其他几个关于“不一致的可访问性”主题的 SO 线程,但没有看到任何处理使用 using 关键字创建的类型别名的任何线程。

我使用别名的原因是因为我正在从另一种语言转换一些旧代码,它简化了转换过程。否则我只会使用没有别名的基础类型。

【问题讨论】:

  • 出于兴趣,我可能遗漏了一些东西,但您为什么要使用TDynamicStringArray,而List&lt;string&gt; 也同样易于书写和阅读?
  • 我同意@AshBurlaczenko,即使它是使用完全限定名称定义的,使用别名似乎也很愚蠢
  • @AshBurlaczenko - 正如我在帖子中所说,我正在转换旧代码,并且该类型与旧代码交织在一起的方式使得使用别名更容易。
  • 这是在我的 VS2010 中编译的,您能否更好地解释错误的上下文或提供更多代码?

标签: c# visual-studio types properties


【解决方案1】:

不,您不能通过任何其他机制更改类型的可访问性,只能更改类型本身。

如果您无法修改该类型的源代码,您唯一的选择是将其包装在您的自定义公共类型中。

【讨论】:

  • 我有来源,你可以从我的帖子中看到。你能举例说明你所说的适用于我的例子吗?否则我不知道在暗示什么。
  • @RobertOschler,对不起-我在回答标题中的问题。我对您未发布的代码部分的理解是,您有一些具有相同(非别名)名称的其他类型具有较低的可访问性。
【解决方案2】:

别名不定义类型;它们只是指现有类型。没有与别名关联的可访问性。

在您的示例中,List&lt;string&gt; 是公开的,您不应收到该错误消息。我的猜测是你在某处有一个非公开的TDynamicStringArray 类,而别名根本没有被使用。

【讨论】:

    猜你喜欢
    • 2019-09-26
    • 2013-06-20
    • 1970-01-01
    • 1970-01-01
    • 2013-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多