有没有办法知道返回的对象是什么

本文关键字:对象 是什么 返回 有没有 | 更新日期: 2023-09-27 18:26:37

我有一个Helper类,用于在程序的层之间传递。这个类的一个特性是,如果底层出现错误,它就会返回。此外,它还通过层传递与例程相关的数据(即,返回数据库表、字符串、整数等)。目前,我通过对象类型添加数据。并且被调用者例程需要知道返回的数据类型。我的问题是,有没有一种方法可以返回对象,以及它是什么类型的数据?如何存储类型描述符?

目前它是如何实现的:

这是一个较低级别的示例(对于没有错误的db例程):

      return new MyHelper()
            .AndAddObjectToReturn(rep)
            .AndHasNoErrors();

这会导致被叫代码执行以下操作:

        .....
        if (contactidHelped.HaveNoErrors())
        {
            repContact contact = (repContact) contactidHelped.GetAttachedDataObject();
            ....
         }

我想做的是在被调用者例程上,让它不知道数据类型,并执行如下代码:

        .....
        if (contactidHelped.HaveNoErrors())
        {
            repContact contact = contactidHelped.GetAttachedDataObject();
            ....
         }

使得期望的对象是它所需要的。

有没有办法知道返回的对象是什么

据我所知,您无法以简单的方式做到这一点。我能想到的实现类似行为的方法是在helper类中使用类型约束。

创建一个具有返回对象类型的虚拟GetAttachedDataObject的Helper基类(比如MyHelper),同时派生另一个类MyHelper<T>,该类具有返回T类型值的方法GetAttachedData<T>

初始化/实例化帮助程序时,请实例化一个强类型的MyHelper<T>。在调用者处,您可以将MyHelper预先转换为所需的MyHelper<T>,并调用GetAttachedData而不是GetAttachedDataObject。当然,您可以进一步调整以满足您的需求。

但这也不理想——它仍然需要你在某个时候进行铸造,尽管我相信这可以减少铸造的需求。

您可以通过简单地将GetAttachedDataObject()存储为对象来传递,例如

var attachedDataObject = contactidHelped.GetAttachedDataObject();

然后,当你需要访问任何给定对象的特定属性或方法时,只需检查类型,如:

if (attachedDataObject is repContact) {
    // your code here
}

然而,我建议您检查一下接口是如何工作的,也许它会更适合您的需求。