Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C语言中的OO问题#_C#_Oop - Fatal编程技术网

C# C语言中的OO问题#

C# C语言中的OO问题#,c#,oop,C#,Oop,framestart.Check()无法编译,因为Check()由于其保护级别而不可访问 但是为什么,Check()受到保护?这不是问题。您看到的行为是定义的一部分。如果要调用FrameStart。请从FrameStart或frame类的代码外部进行检查,该方法需要为或。您可以从FrameStart内部调用检查,但不能在类外部调用。这就是protected的意思:对派生类可见,而不是对外部代码可见。使用framebeging.Check()从外部需要Check()是公共的。被保护仅对派生类别可见

framestart.Check()无法编译,因为
Check()
由于其保护级别而不可访问


但是为什么,
Check()
受到保护?

这不是问题。您看到的行为是定义的一部分。如果要调用FrameStart。请从FrameStart或frame类的代码外部进行检查,该方法需要为或。

您可以从
FrameStart
内部调用
检查,但不能在类外部调用。这就是
protected
的意思:对派生类可见,而不是对外部代码可见。

使用
framebeging.Check()
从外部需要
Check()
是公共的。被保护仅对派生类别可见,但从外部看不到。您试图从外部访问
Check()
方法,因此需要执行
Check()
公共或内部操作


换句话说,您可以从FrameStart实例访问
Check()
,但是
Check()
是静态的,如果您想从外部访问Check(),您需要将可见性更改为public(或internal)。

这样类本身和所有继承的类都可以使用该方法,而不依赖于对象的实例,但是类之外的任何东西都不能使用该方法。

因为您在上面显示的代码中将其声明为受保护

但是不同的规则适用于静态方法。查看下面的SO问题:


共有5个访问修饰符。。。您需要了解每种方法都可以获得什么样的访问权限

private
-只能从类内调用函数

protected
-只能从类及其所有派生类中调用函数

internal protected
-函数可由类及其程序集中的所有派生类调用

internal
——几乎像public一样——可以从程序集中的任何地方调用。。。用于灌肠


public
-可以在任何地方调用

siz是正确的。顺便说一句,你应该使用一个编码标准。通常,类以大写字母开头。如果您不喜欢这样,至少在任何地方都保持一致(帧与帧开始)。
class Frame
{
    static int X;
    static int Y;
    static uint Color;

    static protected bool Check()
    {
        return (Coords.GetPixelColor(X, Y) == Color);
    }
}

class frameBeginning : Frame
{
    static int X = 1;
    static int Y = 2;
    static int Color = 3;
}