【问题标题】:C#: Inconsistent accessibility: property typeC#:不一致的可访问性:属性类型
【发布时间】:2011-04-28 22:05:41
【问题描述】:

怎么了

public partial class MainWindow : Window
{
    public ObservableCollection<TabViewModel> Tabs { get; set; }
    public ICollectionView TabsViewSource { get; set; }
    public int CurrentIndex { get { return TabsViewSource.CurrentPosition; } }

我明白了

可访问性不一致:属性类型“System.Collections.ObjectModel.ObservableCollection”的可访问性低于属性“TabsRendering.MainWindow.Tabs”

当我将代码更改为

public partial class MainWindow : Window
{
    ObservableCollection<TabViewModel> Tabs { get; set; }
    public ICollectionView TabsViewSource { get; set; }
    public int CurrentIndex { get { return TabsViewSource.CurrentPosition; } }

它有效。 ObservableCollection 上的 public 有什么问题

【问题讨论】:

    标签: c#


    【解决方案1】:

    也将TabViewModel设为公共类型。

    显然,将 public 包含类型上的 public 属性设为非公共类型是没有意义的。属性如何向外部程序集展示自己?

    您的第二个示例有效,因为作为一般规则,不提供可访问性修饰符意味着选择 最不适用 修饰符作为默认值 - 在这种情况下:私有。显然,声明内部 (?) 类型的私有属性不存在一致性问题。

    【讨论】:

      【解决方案2】:

      TabViewModel 的可访问性是什么?我猜它不公开。

      【讨论】:

      • 这个答案比其他答案更值得关注,哈哈。简短而直截了当。
      【解决方案3】:

      消息非常直截了当。这与你想做的事情相矛盾。它说你有一些被声明为公共的东西(在这种情况下是 Tabs),但是使用它的人也需要知道 TabViewModel 不是公共的。要么公开要么一些一致的访问说明符。

      【讨论】:

        【解决方案4】:

        以上所有信息都是完全正确的,并且工作正常。我只是想从个人经验中补充一点,如果您使用 TFS 并从 TFS 获取项目,不同的 Visual Studio 版本也会产生此错误。

        我使用 Visual Studio 2013 update 2 进入了一个项目,并与 TFS 同步以获得解决方案。当我尝试运行该项目时,出现了 80 个错误。所有这些都像“......不如财产......”。现在事实证明我需要更新 4。我的 Visual Studio 更新后,我尊重这些更改并且它运行良好。

        如果上述方法都不起作用并且您正在使用 TFS,这可能会很有用。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-11-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多