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;
}