我认为我的疑问很容易解决,但我在谷歌上没有找到任何答案,所以,你可以帮助我:
有两个课程,如:
class A
{
string _Prop1;
string _Prop2;
public string Prop1
{
get { return _Prop1; }
set { _Prop1 = value; }
}
public string Prop2
{
get { return _Prop2; }
set { _Prop2 = value; }
}
public A()
{
// CALL METHOD FROM CHILD B, PASSING PARAMETER, LIKE:
// B objB = new B();
// b.LoadData()
// So, at this point, A properties would receive the sent values from B
// (what i really want)
}
}
class B : A
{
public void LoadData()
{
Prop1 = "Foo";
Prop2 = "Bar";
}
}
和
A objA = new A();
Console.Write("PROP1: {0} / PROP1: {1}", objA.Prop1, objA.Prop2);
objA.Prop1 = "Hello";
objA.Prop2 = "World";
Console.Write("PROP1: {0} / PROP1: {1}", objA.Prop1, objA.Prop2);
Console.ReadKey();
因此,在主程序中将显示:第一个" PROP1:Foo / PROP2:Bar"然后" PROP1:Hello / PROP2:World",但是,第一个Console.Write()
显示为空(PROP1:/ PROP2 :) ...
答案 0 :(得分:1)
您可以通过使Class A
抽象定义一个Class B
必须覆盖的抽象方法来解决此问题。 E.g:
abstract class A {
public string Prop1 { get; set; }
public string Prop2 { get; set; }
protected abstract void LoadData();
public A() {
//some code
LoadData();
//some code
}
}
然后
class B : A {
protected override void LoadData() {
//Class B implementation of LoadData which can
//access Class A properties and init them, e.g.
Prop1 = "foo";
Prop2 = "bar";
}
}
答案 1 :(得分:0)
使用方法隐藏类Mapper和B类中的new和virtual关键字,如下所示:
class Program
{
static void Main(string[] args)
{
Mapper a = new B(); //notice this line
B b = new B();
a.doStuff();
b.doStuff();
Console.ReadLine();
}
}
class A
{
public void doStuff()
{
Console.WriteLine("A did stuff");
}
}
class Mapper : A
{
new public virtual void doStuff() //notice the new and virtual keywords here which will all to hide or override the base class implementation
{
Console.WriteLine("Mapper did stuff");
}
}
class B : Mapper
{
public override void doStuff()
{
Console.WriteLine("B did stuff");
}
}
答案 2 :(得分:0)
您在A
构造函数中的评论是错误的,您无法创建对象的 new 实例,并希望调用对象检索这些值。
当然,您可以在执行加载数据后将值分配给from b,但这仍然建立在创建对象的前提下,以便初始化一个有点错误的对象。
public A()
{
B b = new B();
b.LoadData();
this.Prop1 = b.Prop1;
this.Prop2 = b.Prop2;
}
相反,在基类A
中加载数据可能更有意义,因为它不会对B
的实例执行任何特殊操作(来自您的'向我们展示了)
答案 3 :(得分:0)
这不是问题,因为两个类有不同的引用,你可以使用基类或使用下面的方法来解决你的问题。
A objA = new B();
((B)objA).LoadData();
Console.Write("PROP1: {0} / PROP1: {1}", objA.Prop1, objA.Prop2);