6

如果我有一个抽象类

public abstract class Player
{
    //fields
    private Sport _sport;

    //properties
    protected Sport Sport
    {
        get { return _sport; }
        set { _sport = value; }
    }      
}

这个受保护的访问修饰符是多余的,因为抽象不能被实例化吗?

4

3 回答 3

9

由于无法实例化抽象,因此此受保护的访问修饰符是否多余?

不,绝对不是。考虑:

Player player = new FootballPlayer();
Sport sport = player.Sport;

Sport如果被宣布为公共财产而不是受保护,那将是有效的。当然,这实际上可能是您想要的,但目前只有派生类(及其内部Player)中的代码才能访问该Sport属性。

请注意,您的整个属性将作为等效的自动实现属性更简单:

protected Sport Sport { get; set; }

或允许公开获取但受保护的设置:

public Sport Sport { get; protected set; }
于 2012-11-26T17:40:56.073 回答
5

不,protected在抽象类中不是多余的,因为它使派生实现类“具有”派生:

protected Sport Sport

代替:

public Sport Sport

如果您private完全使用或删除了修饰符,则sport仅对抽象类本身可见。

例如:

public abstract class Player
{
    // Changed to auto property to save some key strokes...
    protected Sport Sport { get; set;}
}

public RealPlayer : Player
{
    public void Foo(Sport sport)
    {
        this.Sport = sport; // Valid
    }
}

在别的班...

var realPlayer = new RealPlayer();
realPlayer.Sport // Compilation error.
于 2012-11-26T17:40:38.240 回答
-2
abstract class ProgressNotesDetail
{

}

 internal class ProgressNotes : ProgressNotesDetail
{

}

抽象类中的默认访问修饰符----内部

于 2017-11-21T10:47:40.537 回答