首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >界面参数

界面参数
EN

Stack Overflow用户
提问于 2014-09-29 14:50:41
回答 2查看 84关注 0票数 1

我对如何实现这一点感到有点困惑。

我在int中定义了一个名为IActivity的接口,其中包含了一些属性。

然后,我创建了两个类来实现这个接口,并添加了一些额外的属性。

EngagementActivity和MPEngagementActivity.为了清楚起见,这两个类实现了IActivity并声明了一些额外的属性

然后,我有一个名为ActivitySvc的基类,它将为这两种类型的活动所共有的所有功能实现虚拟方法。

然后,我实现了两个类,它们派生自基类,必须提供它们自己在基类中声明的SaveActivity方法的实现:

代码语言:javascript
复制
public abstract void SaveActivity(IActivity activity);

我的问题是在实现SaveActivity方法时我会遇到错误,因为我的activity是IActivity类型的,因此它没有特定于EngagementActivity和MPEngagementActivity类的成员。

我做错了什么?

提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-29 14:53:55

虽然它不一定是最好/最正确的方法,但最快的方法是尝试并在相关方法中安全地将活动对象转换为正确的类型。

例如,在使用EngagementActivity的类中,可以这样做:

代码语言:javascript
复制
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文章

票数 3
EN

Stack Overflow用户

发布于 2014-09-29 15:03:02

在IActivity中获取SaveActivity的底层类型并获取属性。可以在不覆盖的抽象类中定义虚拟方法。

代码语言:javascript
复制
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
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26102704

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档