gpt4 book ai didi

C#,从父引用访问子属性?

转载 作者:太空宇宙 更新时间:2023-11-03 19:23:32 25 4
gpt4 key购买 nike

public void GetProps(Parent p){

// want to access lots of child properties here
string childProp1 = p.prop1;
bool childProp2 = p.prop2;
bool childProp3 = p.prop3;

}

但是编译器提示说

"Parent does not contain definition prop1"

该函数将采用父类的不同子类型。

所有的子类都有这个

public override string prop1 { get; set; }

有没有办法做到这一点?

编辑:为了让问题更清楚

我现在有一个巨大的 if-elseif,我可以在这里做类似的事情

if(p is Child0){
Child0 ch = p as Child0;

// want to access lots of child properties here
string childProp1 = ch.prop1;
bool childProp2 = ch.prop2;
bool childProp3 = ch.prop3;

}else if(p is Child1){
Child1 ch = p as Child1;

// want to access lots of child properties here
string childProp1 = ch.prop1;
bool childProp2 = ch.prop2;
bool childProp3 = ch.prop3;

}else if(...// and many more

现在我想删除所有冗余代码并创建一个可以处理所有这些的函数。

最佳答案

如果所有子类都需要这些属性(但实现不同),您应该在基类中将它们声明为抽象属性(Parent),然后在子类中实现它们。

如果某些派生类没有这些属性,那么您希望当前的 GetProps 做什么?

编辑:如果您使用的是 C# 4,并且肯定无法获得更好的类设计(父类声明属性的地方),您可以使用动态类型:

public void GetProps(Parent p) {
dynamic d = p;
string childProp1 = d.prop1;
bool childProp2 = d.prop2;
bool childProp3 = d.prop3;
// ...
}

不过我会把它当作最后的手段......

关于C#,从父引用访问子属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10370645/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com