如果我有一个抽象类
public abstract class Player
{
//fields
private Sport _sport;
//properties
protected Sport Sport
{
get { return _sport; }
set { _sport = value; }
}
}
这个受保护的访问修饰符是多余的,因为抽象不能被实例化吗?
如果我有一个抽象类
public abstract class Player
{
//fields
private Sport _sport;
//properties
protected Sport Sport
{
get { return _sport; }
set { _sport = value; }
}
}
这个受保护的访问修饰符是多余的,因为抽象不能被实例化吗?
由于无法实例化抽象,因此此受保护的访问修饰符是否多余?
不,绝对不是。考虑:
Player player = new FootballPlayer();
Sport sport = player.Sport;
Sport
如果被宣布为公共财产而不是受保护,那将是有效的。当然,这实际上可能是您想要的,但目前只有派生类(及其内部Player
)中的代码才能访问该Sport
属性。
请注意,您的整个属性将作为等效的自动实现属性更简单:
protected Sport Sport { get; set; }
或允许公开获取但受保护的设置:
public Sport Sport { get; protected set; }
不,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.
abstract class ProgressNotesDetail
{
}
internal class ProgressNotes : ProgressNotesDetail
{
}
抽象类中的默认访问修饰符----内部