如何继承父类的一些属性

时间:2012-04-11 08:09:07

标签: c# oop class c#-4.0 object

请考虑以下情况:

我们有一个名为clsMain的基类:

class clsMain
{
    int P1{set; get;}
    int P2{set; get;}
    int P3{set; get;}
    string P4{set; get;}
    string P5{set; get;}
}

我想从clsMain获得这两个对象:

object1 psudo code:
{
    int P1{set; get;}
    int P2{set; get;}
    int P3{set; get;}    
}

和:

object2 psudo code:
{
    int P3{set; get;}
    string P4{set; get;}
    string P5{set; get;}
}

有可能在c#中?我应该使用特定类型的类(抽象,......)吗?

非常感谢

3 个答案:

答案 0 :(得分:1)

在这种情况下,在基类中只保留共享属性,如此伪代码:

class clsMain
{   
    int P3{set; get;}   
}

class object1 : clsMain
{
    int P1{set; get;}
    int P2{set; get;}   
}

class object2 : clsMain
{    
    string P4{set; get;}
    string P5{set; get;}
}

答案 1 :(得分:1)

C#中的继承可以作为一流的概念:

public class BaseClass
{
    public virtual string Name { get { return "Adam"; } }
}

public class ChildClass : BaseClass
{
    public override string Name { get { return "Foo"; } }
}

override某些内容,您需要将其设为virtual,并且需要具有private以外的任何内容的可访问性。

在您的实例中,您可能会执行以下操作:

class clsMain
{
    public virtual int P1{set; get;}
    public virtual int P2{set; get;}
    public virtual int P3{set; get;}
    public virtual string P4{set; get;}
    public virtual string P5{set; get;}
}

class object1 : clsMain
{
    public override int P1{set; get;}
    public override int P2{set; get;}
    public override int P3{set; get;}    
}

class object2 : clsMain
{
    public override int P3{set; get;}
    public override string P4{set; get;}
    public override string P5{set; get;}
}

虽然如果我是诚实的,你的问题不是很清楚。但请注意,C#不支持多重继承类。

听起来你想要过滤掉属性。你不能阻止被继承的成员被访问(好吧,有new修饰符,但这最好是粗略的)。相反,您可以使用接口:

interface Iobject1
{
    int P1 { set; get; }
    int P2 { set; get; }
    int P3 { set; get; } 
}

interface Iobject2
{
    int P3{set; get;}
    string P4{set; get;}
    string P5{set; get;}
}

class clsMain : Iobject1, Iobject2
{
    public int P1{set; get;}
    public int P2{set; get;}
    public int P3{set; get;}
    public string P4{set; get;}
    public string P5{set; get;}
}

答案 2 :(得分:0)

您的问题不明确......您无法继承C#中的2个对象

如果你想让clsMain从object1和object2中获取所有属性,你可以做的是:

  • object2从object1继承
  • clsMain继承自object2

因此clsMain将拥有object1和object2

的所有属性

使用抽象只是保护类不被直接创建。如果你把object1作为抽象,你永远不能做“var x = new object1();”

编辑:我忘了说属性必须受到保护或公开,否则无法从派生类访问它们。