C#中的OO问题

时间:2011-01-03 15:24:34

标签: c# oop

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

frameBeginning.Check();无法编译,因为Check()由于其保护级别而无法访问。

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

6 个答案:

答案 0 :(得分:8)

这不是问题。您看到的行为是protected定义的一部分。如果要从frameBeginning或frame类的代码外部调用frameBeginning.Check,则该方法必须为publicinternal

答案 1 :(得分:4)

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

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

C#: Can a base class use a derived class's variable in a static function?

答案 2 :(得分:2)

您可以在 Check内的中呼叫frameBeginning,但不能在课堂外呼叫。这就是protected的含义:派生类可见,而不是外部代码。

答案 3 :(得分:0)

使用来自外部的frameBeginning.Check()需要Check()是公开的。受保护只能由派生的clasess看到,但不能从外部看到。您正尝试从外部访问Check()方法,因此您需要Check()公开或内部。

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

有5种访问修饰符......您需要了解每种修饰符可以获得哪种访问权限。

private - 只能在类

中调用函数

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

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

internal - 几乎像公众一样 - 可以从程序集内的任何地方调用...用于封装

public - 可以从任何地方调用