C#中.Net接口的继承:如何访问基本成员

C#中.Net接口的继承:如何访问基本成员,c#,.net,inheritance,outlook-addin,C#,.net,Inheritance,Outlook Addin,.Net接口的继承:如何访问基本属性 我想创建从Microsoft.Office.Interop.Outlook.category接口继承的自己的类别类,但我试图访问基本接口的成员,但未成功 我试过base。Name和this。Name都给了我: 错误2“对象”不包含“名称”的定义 使用VS 2013、.Net 4.5 代码: 到目前为止,我在您的代码中看到,您并没有实现接口。您不是从类继承,而是遵循由Outlook.Category接口建立的契约。这里没有“基本”成员,您必须向类中添加成员 如

.Net接口的继承:如何访问基本属性

我想创建从Microsoft.Office.Interop.Outlook.category接口继承的自己的类别类,但我试图访问基本接口的成员,但未成功

我试过base。Name和this。Name都给了我:

错误2“对象”不包含“名称”的定义

使用VS 2013、.Net 4.5

代码:


到目前为止,我在您的代码中看到,您并没有实现接口。您不是从类继承,而是遵循由
Outlook.Category
接口建立的契约。这里没有“基本”成员,您必须向类中添加成员

如果您将鼠标光标放在Outlook.Category上,它将为您提供实现它的功能


我建议您更深入地了解一下

您错误地将接口实现为对象继承。尽管它们都使用相同的语法,但它们有很大的不同

接口是一种契约,允许对相同的通用方法和属性进行多种不同的实现。它保证您编写的类支持某些操作您必须为接口编写实现。这使得更高层次的其他人不关心某件事情如何完成的细节,但也让他们知道它会完成

对象继承允许您使用父类的(非私有)内容。它实际上采用了父类并添加了更多功能。事实上,在Java中,这被称为“扩展”类查找已实现接口的类
Outlook.Category
,并从该类继承
,然后调用
base.Name()
。然后您可以覆盖或扩展您需要的任何其他行为


我不熟悉
Outlook
名称空间,但似乎是一个实现接口的类。你可以试着继承它

你到底想做什么?是否在Outlook中添加新类别?在这种情况下,您只需访问Outlook类别存储(注册表或配置文件中的默认存储)

查看日历文件夹中的IPM.Configuration.CategoryList隐藏消息-您可以使用以下方法查看它:转到日历文件夹,单击Outlook Spy功能区上的IMAPIFolder按钮,转到“关联内容”选项卡,找到带有PR\u message\u CLASS property=“IPM.Configuration.CategoryList”的消息,双击它。数据将位于PR_ROAMING_XMLSTREAM属性中。可以使用Outlook对象模型中的MAPIFolder.GetStorage访问该隐藏邮件

还可以使用添加新类别-查看对象。类似于以下内容的操作将完成此工作(VBA):


您不能从接口继承属性…您必须实现接口保证的属性。我建议您不要继承类别接口(这没有任何意义),而是处理Outlook事件并使用Outlook窗体区域。有关详细信息,请参阅。实现接口将创建此公共字符串名称{get{Trow new NotImplementedException();}set{Trow new NotImplementedException();}}但我不想为Name或任何其他属性重新实现get/set,我只想访问它的值来创建新函数。使用
公共字符串名称{get;set;}
。这同样适用于其他属性VS告诉我不能使用CategoryClass并告诉我使用接口。嗯,那太糟糕了。就像我说的,你要么自己实现它,要么从实现它的东西继承。我正在尝试创建一个附加到接口的插件,允许键盘在文本框上输入:标记(添加类别)、文件(发送到文件夹)、修改属性等。我想继承接口,以便获得/设置带有附加项的类别。VBA无法创建停靠组件。正如其他海报所述,您无法从COM接口派生。您是否正在考虑Outlook任务窗格?
using System;
using Outlook = Microsoft.Office.Interop.Outlook;

namespace MyCategory
{
        public class MyCategory : Outlook.Category
    {
        private string colorName; 
        public string ColorName
        {
            get
            {
                return this.colorName;
            }
            set
            {
                //Name is a member of Outlook.Category
                //https://msdn.microsoft.com/en-us/library/office/microsoft.office.interop.outlook.category_members.aspx
                this.colorName = base.Name;
                //
            }
        }

    }
}
 set vSession = CreateObject("Redemption.RDOSession")
 vSession.MAPIOBJECT = Application.Session.MAPIOBJECT
 set vStore = vSession.Stores.DefaultStore
 set vCategories = vStore.Categories
 set vCategory = vCategories.Add("Redemption Category", olCategoryColorPeach)