可以从另一个子类的子类继承c#中基类的方法

时间:2013-01-24 16:09:30

标签: c#

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

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

4 个答案:

答案 0 :(得分:2)

是的,如果声明为publicprotected,您可以。但不是private

感谢@DavidL ..我忘了提及internal的特殊情况。

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

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

如果我是对的,这也是一个新的隐藏功能,在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.

答案 1 :(得分:1)

取决于。

  • 当A类中的方法是私有时:否
  • 当A类中的方法受到保护时:是
  • 当A类中的方法是公开的时:是
  • 当A类中的方法是public或protected和virtual时,C类可以覆盖该方法。

答案 2 :(得分:0)

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

答案 3 :(得分: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
}