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

本文关键字:调用 情况下 方法 对象 转换 我可以 | 更新日期: 2023-09-27 18:17:10

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

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

详细信息:OBJ1 是一个没有公共构造函数的第三方对象,因此为了进行测试,我创建了自己的对象,该对象"相似"但与原始对象绝不相同。 它们有一些共同的属性,包括: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;
    }

我尝试实现这样的部分接口: private partial interface IOrderUserTag { bool Prop1 { get; set; } }

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

"很想有一个想法,因为我不需要维护重复的代码。

谢谢-艾德

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

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

((dynamic)_obj).Prop1 = true;

只要_obj有一个叫做 Prop1 的布尔二传手(大小写很重要(,这将起作用。

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

这是反射方式:

    public void DoStuff(object obj)
    {
        PropertyInfo prop = obj.GetType().GetProperty("Prop1");
        if (prop != null && prop.PropertyType == typeof(bool) && prop.CanWrite)
        {
            prop.SetValue(obj, true);
        }
    }

您可以在 if 语句中放入您认为必要的任何检查。

只有当这适用时,你只需要用不同的对象调用相同的例程?

public void FunctionA<T>(T obj)
{
  //obj.GetType().GetProperty("Prop1").SetValue(obj, true, null); 
}
相关文章: