如何继承父类的一些属性
本文关键字:属性 父类 何继承 继承 | 更新日期: 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();"
编辑:我忘了说属性必须受到保护或公共,否则无法从派生类访问它们。