Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何继承父类的某些属性 请考虑这种情况:_C#_Oop_Class_C# 4.0_Object - Fatal编程技术网

C# 如何继承父类的某些属性 请考虑这种情况:

C# 如何继承父类的某些属性 请考虑这种情况:,c#,oop,class,c#-4.0,object,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;} } object1 psudo code: { int P1{set; get;} int P2{set; get;} int P3{set; get;} } 我

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

class clsMain
{
    int P1{set; get;}
    int P2{set; get;}
    int P3{set; get;}
    string P4{set; get;}
    string P5{set; get;}
}
object1 psudo code:
{
    int P1{set; get;}
    int P2{set; get;}
    int P3{set; get;}    
}
我想从
clsMain
获得这两个OBEJCT:

class clsMain
{
    int P1{set; get;}
    int P2{set; get;}
    int P3{set; get;}
    string P4{set; get;}
    string P5{set; get;}
}
object1 psudo code:
{
    int P1{set; get;}
    int P2{set; get;}
    int P3{set; get;}    
}
以及:

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


非常感谢

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

如果希望clsMain从object1和object2继承所有属性,则可以执行以下操作:

  • object2从object1继承
  • clsMain从object2继承
因此,clsMain将拥有object1和object2的所有属性

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


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

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

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#中可以作为一级概念:

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

public class ChildClass : BaseClass
{
    public override string Name { get { return "Foo"; } }
}
要覆盖某个内容,您需要使其成为虚拟的,并且需要具有除私有之外的任何内容的可访问性

在您的情况下,您可能会执行以下操作:

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

你想让clases拥有这些属性吗?Tigran下面的回答对我来说很好。不是我,但我猜是因为你发布的代码无效C#。@AdamHouldsworth:原始代码不太:),所以我也遵循了同样的概念。。呸。这个问题是概念性的,所以答案也是..谢谢亲爱的@Adam Houldsworth。但是,当我基于object2创建对象时,我会看到
clsMAin
properties。我想要一个类似Sql的东西view@Kerezo不能隐藏成员。相反,您可以做的是创建只公开您想要的成员的接口,并与该接口对话。