3

说 A 类是基类,然后你有 A 的 B 类子类(B 类:A)。然后你有C类:B。

问题是如果您在 A 类中有一个方法,C 类可以使用该方法吗?

4

4 回答 4

2

是的,你可以,如果它被声明publicprotected. 但不是private

感谢@DavidL .. 我忘了提到internal.

来自 Visual Studio 附带的 C# 手册(此处为 2012 版)::

  • • 继承是可传递的。如果 C 派生自 B,B 派生自 A,则 C 继承 B 中声明的成员以及 A 中声明的成员。 • 派生类扩展其直接基类。派生类可以向其继承的成员添加新成员,但不能删除继承成员的定义。• 实例构造函数、析构函数和静态构造函数不是继承的,但所有其他成员都是继承的,无论它们声明的可访问性如何(第 3.5 节)。但是,根据它们声明的可访问性,继承的成员可能无法在派生类中访问。• 派生类可以通过声明具有相同名称或签名的新成员来隐藏(第 3.7.1.2 节)继承的成员。但是请注意,隐藏继承的成员并不会删除该成员 - 它只会使该成员无法直接通过派生类访问。• 类的实例包含在类及其基类中声明的所有实例字段的集合,并且存在从派生类类型到其任何基类类型的隐式转换(第 6.1.6 节)。因此,对某个派生类的实例的引用可以被视为对其任何基类的实例的引用。• 类可以声明虚拟方法、属性和索引器,派生类可以覆盖这些函数成员的实现。这使类能够表现出多态行为,其中由函数成员调用执行的操作取决于调用该函数成员的实例的运行时类型。

如果我是对的,这也是 C# 5.0 中的一个新隐藏功能:

嵌套类型可以隐藏(第 3.7.1 节)基成员。嵌套类型声明中允许使用 new 修饰符,以便可以显式表达隐藏。这个例子

using System;

class Base
{
    public static void M() {
        Console.WriteLine("Base.M");
    }
}
class Derived: Base 
{
    new public class M 
    {
        public static void F() {
            Console.WriteLine("Derived.M.F");
        }
    }
}
class Test 
{
    static void Main() {
        Derived.M.F();
    }
}

显示了一个嵌套类 M,它隐藏了 Base 中定义的方法 M。

于 2013-01-24T16:10:24.450 回答
1

这取决于。

  • 当 A 类中的方法是私有的时:否
  • 当A类中的方法被保护时:是
  • 当 A 类中的方法是 public 时:是
  • 当 A 类中的方法是公共的或受保护的虚拟方法时,C 类可以覆盖该方法。
于 2013-01-24T16:10:51.730 回答
0

是的,当你从一个类继承时,你会得到它的所有方法,包括它从其他人那里继承的所有方法。

于 2013-01-24T16:10:38.620 回答
0
public class A
{
    public int Id { get; set; }
    protected int protectedId { get; set; }
    private int privateId;
}

public class B : A
{
}

public class C : B
{
    public C()
    {
        int temp = Id; // works
        int temp1 = protectedId; // works
        int temp2 = privateId; // does NOT work
    }
}

和其他班级;

public void SomeMethod()
{
    C c = new C();
    int i = c.Id; // works
    int j = c.protectedId; // does NOT work
    int k = c.privateId; // does NOT work
}
于 2013-01-24T16:15:36.740 回答