【问题标题】:About partial class (...inaccessible due to its protection level)关于部分类(...由于其保护级别而无法访问)
【发布时间】:2015-07-27 16:56:47
【问题描述】:

我有一个名为 Point 的部分类,我想在其中创建一个 JustTest 方法来练习(这没有意义,因为它只是写出一行),但是我收到此错误“`Program.Point .JustTest()' 由于其保护级别而无法访问”。

public partial class Point
{
    private int x;
    private int y;

    public Point (int x, int y)
    {
        this.x = x;
        this.y = y;
    }

    partial void JustTest();
}

public partial class Point
{
    partial void JustTest()
    {
        Console.WriteLine("Should I work?");
    }

    public int setX
    {
        set
        {
            x = value;

        }
        get
        {
            return x;
        }
    }

    public int setY
    {
        set
        {
            y = value;

        }
        get
        {
            return y;
        }
    }
}

static void Main()
{
    Point p1 = new Point(20,30);        
    p1.JustTest();
}

【问题讨论】:

  • JustTest() 是private。部分部分与这个错误无关,虽然你用错了。

标签: c#


【解决方案1】:

根据文档:

不允许使用访问修饰符。部分方法是隐式私有的。

这证明了您收到的有关方法不可访问的错误是合理的。

也许如果您提供更多关于您想要实现的目标和原因的背景信息,可以提供更多帮助。

partial (Method)

【讨论】:

    【解决方案2】:

    默认情况下,类的所有成员(方法和字段)都是私有的。所有部分方法都必须是私有的。

    所以只需将行更改为:

    public void JustTest() ...
    

    一切都会好起来的。

    【讨论】:

    • 是的,这行得通,但是我不能做public void JustTest();,然后在另一个部分类中它的主体。那这不可能吗?
    • @justrandomdude 你有理由这样做吗?或者这只是一个学习练习?
    • @justrandomdude,是的,这是不可能的。如果要拆分声明和实现,则必须将方法设为私有。应尽可能避免使用部分类,因为它们会使代码非常难以阅读。部分方法只会加剧这个问题,所以无论如何整个事情都应该没有实际意义:)。
    【解决方案3】:

    部分方法是“隐式私有的,因此它们不能是虚拟的。”也不能在同一个类和模块之外访问。如果您希望它可以在外部访问,则必须声明将访问部分方法的公共方法。见解释here

    【讨论】:

      【解决方案4】:

      如果没有声明任何其他成员,则类中的任何成员都是private。因此编译器错误是绝对正确的,因为您无法在 Program 类中访问该私有方法 JustTest

      改为将JustTest 设为公共并省略partial 定义,因为任何partial 成员都隐含为private

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-09-26
        • 2011-09-01
        • 1970-01-01
        • 2011-04-02
        • 2011-02-07
        相关资源
        最近更新 更多