0

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

目前这是它的实施方式:

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

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

这会冒泡到执行此操作的被调用者代码:

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

我想要做的是在被调用程序上,如果数据类型和代码如下所示:

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

这样预期的对象就是它所需要的。

4

2 回答 2

0

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

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

当你初始化/实例化助手时,实例化一个强类型的MyHelper<T>. 在调用者处,您可以将 MyHelper 强制转换为所需的MyHelper<T>前期并调用 GetAttachedData 而不是 GetAttachedDataObject。当然,您可以进一步调整它以满足您的需求。

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

于 2013-08-07T02:01:42.180 回答
0

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

var attachedDataObject = contactidHelped.GetAttachedDataObject();

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

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

但是,我建议您检查接口的工作方式,也许它会更适合您的需求。

于 2013-08-07T02:09:34.610 回答