0

请考虑这种情况:

我们有一个名为的基类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#中可能吗?我应该使用特定类型的类(抽象,...)吗?

多谢

4

3 回答 3

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;}
}
于 2012-04-11T08:14:58.627 回答
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;}
}
于 2012-04-11T08:17:04.433 回答
0

您的问题不清楚...您不能从 C# 中的 2 个对象继承

如果您希望 clsMain 具有从 object1 和 object2 继承的所有属性,您可以做的是:

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

所以 clsMain 将拥有来自 object1 和 object2 的所有属性

使用抽象只是保护类不被直接创建。如果您将 object1 作为抽象对象,您将永远无法执行“var x = new object1();”

编辑:我忘了说属性必须是受保护的或公共的,否则它们不能从派生类中访问。

于 2012-04-11T08:14:48.973 回答