ClassInterface

ClassInterface

类接口是未在托管代码中显式定义的接口,它将公开在 .NET 对象上显式公开的所有公共方法、属性、字段和事件。此接口可以是双绑定接口,也可以是仅调度接口。

• ClassInterfaceType.None
• ClassInterfaceType.AutoDispatc
• ClassInterfaceType.AutoDual
None指示不为类生成类接口。如果未显式实现任何接口,则该类将只通过 IDispatch 接口提供后期绑定访问。这是 ClassInterfaceAttribute 的推荐设置。要通过由类显式实现的接口来公开功能,唯一的方法是使用 ClassInterfaceType.None
AutoDispatch指示该类只支持 COM 客户端的后期绑定。在请求时,该类的调度接口将自动向 COM 客户端公开。类型 类型库导出程序 (Tlbexp.exe) 生成的类型库不包含调度接口的类型信息,以防止客户端缓存接口的 DISPID。由于客户端只能后期绑定到调度接口,因此该接口不会出现 ClassInterfaceAttribute 中所述的版本控制问题。
AutoDual指示自动为类生成双重类接口并向 COM 公开。为该类接口生成类型信息并在类型库中发布。由于 ClassInterfaceAttribute 中描述的版本控制方面的限制,极力建议不要使用 AutoDual

By default 当生成COM组件的时候,compiler会使用ClassInterfaceType.AutoDispatch

ClassInterfaceType.AutoDispatch:
只有一个 IDispatch 类接口被自动生成但是没有类型信息(typeinfo),所以dispids 没有保存下来。 
好处: 没有版本控制问题,因为类只支持 late binding without caching dispids. Works cleanly from script.  
坏处: 需要用户的工作量大了,而且对vb6用户更难,应为everything 必须声明为Object.  速度较慢,因为第一次调用必须通过 GetIdsOfNames()然后 Invoke().  

ClassInterfaceType.AutoDual 仅推荐在开发环境中使用,在产品环境中强烈不推荐,因为它的版本控制是个大麻烦。

ClassInterfaceType.None:
灵活性最大。

所以办法是:1)如果仅仅是测试目的,可以使用ClassInterfaceType.AutoDual:
 [ClassInterface(ClassInterfaceType.AutoDual)]
  public class SimpleClass {
    public SimpleClass() {
     }
    public string Hello() {
      return "Hello,Mikky;)");
    }
  }
2) 如果作为产品发布,你还是在VS.NET中定义interface,然后让class实现interface.
using using MYCOMPLUSLib;
using System;
using System.Runtime.InteropServices;
namespace CSharpLib
{
interface ISimple
{
 string hello();
 string name();
}

[ClassInterface(ClassInterfaceType.None)]
public class MyClass:ISimple
{
public MyClass()
{
}
public static long Login(string Server,string User,string Pwd)
{
ISimpler DBXML=new SimplerClass ();

int Session = 0;
try
{
Session = DBXML.Login(Server, User, Pwd);
}
catch(Exception ex)
{
Session = -1;
}

return Session;

}

public string hello()
{
return "Hello ;)";
}

public string name()
{
return "I am Mikkey!";
}
}
}

转载于:https://www.cnblogs.com/JessieDong/archive/2009/07/21/1527632.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值