我有一个帮助程序类,我用它在程序的各层之间传递。此类的一个功能是,如果底层有错误,它将返回。它还通过层传回与例程关联的数据(即,返回数据库表,字符串,整数等...)。目前我通过对象类型添加数据。并且被调用者例程需要知道返回的数据类型。 我的问题是,有没有办法返回对象,以及它是什么类型的数据?以及如何存储类型描述符?
目前这是如何实现的:
这是较低级别的示例(对于没有错误的db例程):
return new MyHelper()
.AndAddObjectToReturn(rep)
.AndHasNoErrors();
这会冒泡到被调用者代码:
.....
if (contactidHelped.HaveNoErrors())
{
repContact contact = (repContact) contactidHelped.GetAttachedDataObject();
....
}
我想要做的是在被调用者例程中,如果数据类型是无知的,并且执行如下代码:
.....
if (contactidHelped.HaveNoErrors())
{
repContact contact = contactidHelped.GetAttachedDataObject();
....
}
这样预期的对象就是它所需要的。
答案 0 :(得分:0)
据我所知,你无法以简单的方式做到这一点。我能想到的实现类似行为的方法是在你的助手类中使用类型约束。
创建一个基本Helper类(比如说MyHelper),它有一个虚拟的GetAttachedDataObject返回对象类型,同时派生另一个类 - MyHelper<T>
,它有一个方法GetAttachedData<T>
返回类型为T的值。
初始化/实例化帮助程序时,实例化强类型MyHelper<T>
。在调用者处,您可以将MyHelper强制转换为所需的MyHelper<T>
,并调用GetAttachedData而不是GetAttachedDataObject。当然,您可以进一步调整以满足您的需求。
但这也不理想 - 它仍然要求你在某些时候进行铸造,但我相信它可以减少铸造的需要。
答案 1 :(得分:0)
您可以通过简单地将其存储为对象来传递GetAttachedDataObject()
,例如
var attachedDataObject = contactidHelped.GetAttachedDataObject();
然后,当您需要访问任何给定对象的特定属性或方法时,只需检查类型:
if (attachedDataObject is repContact) {
// your code here
}
但是,我建议您查看Interfaces的工作原理,或许它更适合您的需求。