【问题标题】:Inheritance of C# private/protected membersC# 私有/受保护成员的继承
【发布时间】:2023-03-03 00:31:01
【问题描述】:

这里有人说,如果成员受到保护,您可以访问它们: Are private members inherited in C#?

真的有人试过吗?

我试过了,它甚至不能与受保护的:

public partial class Base
{
    protected IObject myObject;
}

如果我派生(Base 在另一个命名空间中,但我当然导入该命名空间应该没关系)

public partial class Derive: Base
{

}

Intellisense 不在派生类中显示 myObject。

如果我在所有派生类中都需要一个 myObjhect 成员来调用某些方法,我该怎么办?如果我必须复制该成员,那么继承有什么用?

更新:我忘记了 Derive:Base 但这只是我的错字,我当然是这样做的。

【问题讨论】:

  • 当您说:“Intellisense 不在派生类中显示 myObject”时,您的意思是您试图在 Derive 类的方法中访问 myObject,而不是从外部访问?否则就对了,你看不到……
  • 是的,在 Derive 方法中。

标签: c# inheritance


【解决方案1】:

你必须实际上从Base类派生:

public partial class Derive : Base
{
}

【讨论】:

  • 那么myObject 应该可以从Derive 类访问。
  • 终于成功了,但很奇怪我不得不重新编译多次,因为这可能是由于程序集依赖。
【解决方案2】:

你没有派生。要派生,您必须执行以下操作:

public class Base
{
    protected IObject myObject;
}

public class Derive : Base
{

}

myObject 现在在Derive 中可用。部分意味着您将类定义拆分为多个文件。

【讨论】:

  • 错字了,当然我是从base派生的,但是intellisense没有显示myObject。
  • 它应该……至少对我有用。
【解决方案3】:

你在派生时不会错过基类吗?应该与声明为受保护的 myObject 一起使用。

public partial class Derive : Base
{

}

【讨论】:

    【解决方案4】:

    派生类可以访问 公共、受保护、内部和 受保护的基地内部成员 班级。即使派生类 继承基的私有成员 类,它不能访问这些成员。 但是,所有这些私人成员都是 仍然存在于派生类中,并且 可以做和他们一样的工作 基类本身。例如, 假设一个受保护的基类 方法访问私有字段。那 字段必须存在于派生的 为了继承基类的类 类方法才能正常工作。

    发件人:http://msdn.microsoft.com/en-us/library/ms173149.aspx

    检查this

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-12
      • 2014-06-09
      • 2012-09-12
      • 1970-01-01
      • 1970-01-01
      • 2016-09-24
      • 2018-12-27
      • 2012-10-03
      相关资源
      最近更新 更多