这里的答案似乎有相当多的错误信息.有关正确答案,请参阅C#规范的第3.4节,我在此为您重现:
类型的成员要么在类型声明中声明,要么从类型的基类继承.当类型继承自基类时,基类的所有成员(实例构造函数,析构函数和静态构造函数除外)都将成为派生类型的成员.声明的基类成员可访问性不控制成员是否继承 - 继承扩展到任何不是实例构造函数,静态构造函数或析构函数的成员.但是,可能无法在派生类型中访问继承的成员,因为它声明了可访问性,或者因为它在类型本身中被声明隐藏.
我在相关部分增加了一些重点.关键是除了构造函数和析构函数之外,所有成员都是继承的.成员是继承的,无论它们是方法,字段,属性,事件还是索引器.无论是公共的,私人的还是受保护的,成员都是继承的.成员是继承的,无论它们是静态的,实例的,虚拟的还是抽象的.所有成员都是继承的.
派生类继承所有方法字段,也是属性,虽然私有方法,字段和属性通常不能从派生类直接访问或可见,除非它嵌套在它的超类(父类)中.但是,构造函数和终结器不是继承的,所以当你派生一个类型时,你总是需要编写对象初始化所需的任何构造函数,即使它只是调用基类的构造函数.
但是,通常认为将字段设置为私有并允许在必要时通过属性访问它们是一种好的做法.这样,它允许您(基类的作者)确信您可以控制类状态(其字段的值)可以更改的方式.
为了说明您对属性的疑问:
public class Person
{
public Name { get; set; }
public void Greet()
{
Console.WriteLine("Hello");
}
}
public class Child : Person
{
public Nickname { get; set;}
}
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,派生类Child 除了派生属性(Name)及其派生方法(Greet)之外还有一个昵称(属性).