如果我有一个像
这样的抽象类public abstract class Player
{
//fields
private Sport _sport;
//properties
protected Sport Sport
{
get { return _sport; }
set { _sport = value; }
}
}
这个受保护的访问修饰符是否多余,因为抽象无法实例化?
答案 0 :(得分:8)
不,绝对没有。考虑:这是受保护的访问修饰符还原剂,因为抽象无法实例化吗?
Player player = new FootballPlayer();
Sport sport = player.Sport;
如果Sport
被声明为公共财产而不是受保护,那么这将是有效的。当然,这可能实际上是您想要的,但目前只有派生类中的代码(以及Player
内部的代码)才能访问Sport
属性。
请注意,您的整个属性可以更简单,只有automatically implemented property:
protected Sport Sport { get; set; }
或允许公众获得但受保护的设置:
public Sport Sport { get; protected set; }
答案 1 :(得分:5)
不,抽象类中的protected
不是多余的,因为它使派生实现类“拥有”-derive:
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.
答案 2 :(得分:-2)
abstract class ProgressNotesDetail
{
}
internal class ProgressNotes : ProgressNotesDetail
{
}
抽象类中的默认访问修饰符----内部