继承访问修饰符

本文关键字:访问 继承 | 更新日期: 2023-09-27 18:23:37

假设我有一个类:

public class Products
{
    public string ID { get; set; }
    public string Name { get; set; }
    public string GetItemName() {  ... }
    public void SetItemName() {  ... }
    public string GetItemID() {  ... }
    public void SetItemID() {  ... }
    //...
}

任何方法都可以使所有属性或方法继承父类的访问修饰符,所以我不必为每个属性/方法分配[public]。

继承访问修饰符

public string Name { get; set; }
public string GetItemName() {  ... }
public void SetItemName() {  ... }

那不是C#代码,那是C++。一种不支持属性,但支持此属性的语言:

public:
    string GetItemName();
    void SetItemName();

这可能是你真正想要的。不,永远不要犯将C#与C++进行比较的错误,它只是顺便与语言相似。访问者关键字必须应用于每个成员。好的是,你会少很多。删除GetItemName和SetItemName方法,Name属性就是您所需要的。

这是一篇可能对你有用的旧杂志文章,"C++->C#:从C++到C#需要知道什么"

类没有办法做到这一点。这就是C#语法的定义方式。如果跳过访问修饰符,则应用默认值,对于类,它将是内部修饰符,而对于其成员,它是私有的。

根据规范,其他默认值为:

  • 接口和类一样,可以声明为公共类型或内部类型。与类不同,接口默认为内部访问。接口成员始终是公共的,并且不能应用任何访问修饰符。

  • 命名空间和枚举成员始终是公共的,不能应用任何访问修饰符。

  • 默认情况下,代理具有内部访问权限。

  • 在命名空间内或编译单元的顶层声明的任何类型(例如,不在命名空间、类或结构内)默认情况下都是内部的,但可以公开。

不,语言规范说,如果你不指定访问修饰符,将使用默认的:

  • 默认情况下,类和结构中的成员是私有的
  • 默认情况下,类型(类、结构、委托、接口和枚举)是内部的,除非它们在默认为private时被放置在另一个类型(嵌套类)中
  • 接口成员、枚举成员和命名空间没有可访问性修饰符的概念,但可以认为始终是公共的