c#继承帮助

时间:2010-11-16 17:02:35

标签: c# inheritance

我对继承很新,想问问题。我有一个基类,它有许多功能,由许多派生类共享。

每个派生类的唯一区别是名为Name的单个方法。每个派生类的功能都相同,但需要名称区别。

我在名为Name的基类中有一个属性。我如何安排它,以便派生类可以覆盖基类属性?

感谢。

7 个答案:

答案 0 :(得分:4)

将您的方法声明为virtual

public class A
{
    public virtual string Name(string name)
    {
        return name;
    }
}
public class B : A
{
    public override string Name(string name)
    {
        return base.Name(name); // calling A's method
    }
}
public class C : A
{
    public override string Name(string name)
    {
        return "1+1";
    }
}

答案 1 :(得分:3)

使用virtual属性:

class Base
{
    public virtual string Foo
    {
        get;
        set;
    }
}

class Derived : Base
{
    public override string Foo
    {
        get {
            // Return something else...
        }
        set {
            // Do something else...
        }
    }
}

答案 2 :(得分:3)

您可以在基类中使用虚拟或抽象关键字声明它,然后派生类可以覆盖它

答案 3 :(得分:2)

您需要将您的属性(在基类中)声明为virtual

答案 4 :(得分:2)

要使每个派生类重写属性,您只需将属性标记为虚拟

class Base {
  public virtual Property1 { 
    get { ... }
    set { ... }
  }
}

答案 5 :(得分:2)

嗯,我不能从你的描述中确定继承实际上是解决问题的正确方法,但是这里是如何使属性被覆盖的:

class Base
{
    public virtual string Name { get; set; }
}

但你需要它可写吗? readonly属性可能更有意义,在这种情况下这可能有效:

class Base
{
    public virtual string Name
    {
        get { return "BaseName"; }
    }
}

class Derived : Base
{
    public override string Name
    {
        get { return "Derived"; }
    }
}

答案 6 :(得分:2)

在基类中:

public virtual string Name { get; set; }

在派生类中:

public override string Name { get; set; }

但是,如果类之间的唯一区别是它们具有不同的名称,我认为不应该继承,而应该只使用构造函数中设置了Name的基类:

e.g。

public class MyObject
{
     public string Name { get; private set; }

     public enum ObjectType { TypeA, TypeB, ... }

     public MyObject(ObjectType obType)
     {
          switch (obType)
          {
              case ObjectType.TypeA:
                  Name = "Type A";
              // and so on
          }
     }
}