gpt4 book ai didi

c# - 当只有一个成员的类型不同时,将子类视为其父类(super class)

转载 作者:太空宇宙 更新时间:2023-11-03 11:55:49 24 4
gpt4 key购买 nike

我有一个 Variable 类和 3 个子类:VariableBool、VariableLong 和 VariableDouble。每个子类只定义一个后缀类型的值成员。

现在,我需要通过 WCF 传输基于这些类的对象。我有多个客户将他们的 variale 注册到服务器。每当一个客户端上的值发生变化时,它就会在所有其他客户端上更新。

我的问题是:有没有办法做到:

someVar.Value = anotherVar.Value;

无论类型如何,无需检查类型,例如:

VariableBool anotherVarBool = anotherVar as VariableBool;
if (anotherVarBool != null) {
(someVar as VariableBool).Value = anotherVar.Value;
}
// check other types...

我错过了什么?有某种模式吗?我可以使用反射吗?另外,由于 WCF,我不认为我可以使用泛型(我已经尝试过但我可以让它工作)。

谢谢

最佳答案

如果您使用的是 mex 生成的 WCF 代理,那么我怀疑反射(或 ComponentModel)确实是最简单的选择 - 类似于:

public static void Copy<T>(T source, T destination,
string propertyName) {
PropertyInfo prop = typeof(T).GetProperty(propertyName);
prop.SetValue(destination, prop.GetValue(source, null), null);
}

或者,如果您甚至想将变量类型作为基类来使用它:

public static void Copy(object source, object destination,
string propertyName) {
PropertyInfo sourceProp = source.GetType().GetProperty(propertyName);
PropertyInfo destProp = destination.GetType().GetProperty(propertyName);
destProp.SetValue(destination, sourceProp.GetValue(source, null), null);
}

关于c# - 当只有一个成员的类型不同时,将子类视为其父类(super class),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/540813/

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