我对如何实现这一点感到有点困惑。
我在int中定义了一个名为IActivity的接口,其中包含了一些属性。
然后,我创建了两个类来实现这个接口,并添加了一些额外的属性。
EngagementActivity和MPEngagementActivity.为了清楚起见,这两个类实现了IActivity并声明了一些额外的属性
然后,我有一个名为ActivitySvc的基类,它将为这两种类型的活动所共有的所有功能实现虚拟方法。
然后,我实现了两个类,它们派生自基类,必须提供它们自己在基类中声明的SaveActivity方法的实现:
public abstract void SaveActivity(IActivity activity);我的问题是在实现SaveActivity方法时我会遇到错误,因为我的activity是IActivity类型的,因此它没有特定于EngagementActivity和MPEngagementActivity类的成员。
我做错了什么?
提前谢谢。
发布于 2014-09-29 14:53:55
虽然它不一定是最好/最正确的方法,但最快的方法是尝试并在相关方法中安全地将活动对象转换为正确的类型。
例如,在使用EngagementActivity的类中,可以这样做:
public override void SaveActivity(IActivity activity)
{
var engagementActivity = activity as EngagementActivity;
if (engagementActivity != null) // it's the correct type
{
// Do whatever's needed here
}
}如果engagementActivity变量为null,则它不是试图将其转换为空的类型。有关“as”的更多信息,请参见这篇MSDN文章。
发布于 2014-09-29 15:03:02
在IActivity中获取SaveActivity的底层类型并获取属性。可以在不覆盖的抽象类中定义虚拟方法。
public virtual void SaveActivity(IActivity activity)
{
...
// some common code for all types
if(activity is EngagementActivity)
{
// use explicit type casting '(EngagementActivity)activity' and get your properties
// save your data
return;
}
if(activity is MPEngagementActivity)
{
// use explicit type casting '(MPEngagementActivity)activity' and get your properties
// save your data
return;
}
// other activity types
...
// if no case fired save data for common activity or throw exception for unknown type
}https://stackoverflow.com/questions/26102704
复制相似问题