如何继承父类的一些属性

本文关键字:属性 父类 何继承 继承 | 更新日期: 2023-09-27 18:30:47

请考虑以下情况:

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

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

我想从clsMain那里得到这 2 个 obejcts:

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#中可以吗? 我应该使用特定类型的类(抽象,...)吗?

多谢

如何继承父类的一些属性

继承在 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;}
}

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

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;}
}

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

如果您希望 clsMain 从对象 1 和对象 2 继承所有属性,您可以做的是:

    对象
  • 2 从对象 1 继承
  • clsMain 继承自对象 2

所以 clsMain 将具有对象 1 和对象 2 的所有属性

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

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