C#:不一致的可访问性:属性类型

时间:2010-10-21 23:58:08

标签: c#

有什么问题
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; } }

有效。 public

ObservableCollection的错误

5 个答案:

答案 0 :(得分:64)

TabViewModel设为公共类型。

显然, public 包含类型的 public 属性不属于非公开类型是没有意义的。该物业如何将自己呈现给外部集会?

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

答案 1 :(得分:3)

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

答案 2 :(得分:2)

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

答案 3 :(得分:1)

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

我使用Visual Studio 2013更新2进入了一个项目,并与TFS同步以获得解决方案。当我试图运行该项目时,我得到了80个错误。所有这些都像是...... ......比财产更难获得......&#34;。现在我发现我需要更新4.一旦我的Visual Studio更新了,我就尊重这些变化并且它完美地工作了。

如果以上都不起作用并且您正在使用TFS,那么这可能很有用。

答案 4 :(得分:0)

class Tbl_Selected:BaseEntity
{
    public int StudentId { get; set; }

    public int CourseId { get; set; }

    [ForeignKey(nameof(StudentId))]
    public Tbl_Student Tbl_Student { get; set; }

    [ForeignKey(nameof(VahedId))]
    public Tbl_Course Tbl_Course { get; set; }
}

此代码为

public class Tbl_Selected:BaseEntity
    {
        public int StudentId { get; set; }

        public int CourseId { get; set; }

        [ForeignKey(nameof(StudentId))]
        public Tbl_Student Tbl_Student { get; set; }

        [ForeignKey(nameof(VahedId))]
        public Tbl_Course Tbl_Course { get; set; }
    }

您最多将public添加到班级