请考虑以下情况:
我们有一个名为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#中?我应该使用特定类型的类(抽象,......)吗?
非常感谢
答案 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中获取所有属性,你可以做的是:
因此clsMain将拥有object1和object2
的所有属性使用抽象只是保护类不被直接创建。如果你把object1作为抽象,你永远不能做“var x = new object1();”
编辑:我忘了说属性必须受到保护或公开,否则无法从派生类访问它们。