gpt4 book ai didi

c# - 我可以在不强制转换的情况下调用基础对象的方法吗?

转载 作者:行者123 更新时间:2023-11-30 20:40:41 25 4
gpt4 key购买 nike

编辑。我很抱歉打错了。两个对象都是独立的。 OBJ1 实际上来自第 3 方,我无法访问它的构造函数,所以我使用它的一些功能和我自己的一些功能构建了自己的构造函数。

我有一个将使用 OBJ1 作为参数调用的方法。我需要编写完全相同的例程,但将 OBJ2 作为参数传递。OBJ1 和 OBJ2 并不相同,但它们有一个共同的属性:Prop1。

详细信息:OBJ1 是一个没有公共(public)构造函数的第 3 方对象,因此为了测试,我创建了自己的对象,它与原始对象“相似”但绝不相同。它们有一些共同的属性,包括:Prop1。

我想这样做:

   private ObjectTypeA OBJ1 = new ObjectTypeA();
private ObjectTypeB OBJ2 = new ObjectTypeB();
main()
{
GetPlacedOrderIDFromTag(OBJ1);
GetPlacedOrderIDFromTag(OBJ2);

}
private void FunctionA (object _obj)
{
// I know this object has this property.
_obj.Prop1 = true;
}

我试过像这样实现部分接口(interface):
私有(private)部分接口(interface) IOrderUserTag { bool Prop1 { get;放; }

但由于 OBJ1 是第 3 方对象,我无法让编译器知道它遵守此接口(interface)。

'如果没有我需要维护的重复代码,我会很高兴。

谢谢,-艾德

最佳答案

C# 确实提供鸭子类型——dynamic 关键字:

((dynamic)_obj).Prop1 = true;

只要 _obj 有一个名为 Prop1 的 bool 值 setter (大小写很重要),它就可以工作。

另一种方法是下拉到反射层,它提供了在属性列表中上下搜索的函数,您可以使用自己的参数调用它们。

关于c# - 我可以在不强制转换的情况下调用基础对象的方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33060275/

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