我目前有一个COM组件的接口,如下所示:
[ComVisible(true), InterfaceType(ComInterfaceType.InterfaceIsIUnknown), Guid("aa950e58-7c6e-4818-8fc9-adecbc7a8f14")]
public interface MyIObjects
{
void set_price(float rx);
void set_size(long rx);
float get_price();
long get_size();
}
现在有一条简单的快捷方式,可以将以下两行减少为一行
void set_price(float rx);
float get_price();
我知道在课堂上我可以做这样的事情
int Price { get; set; }
但这会在界面中起作用吗?
答案 0 :(得分:1)
COM只关心接口,而不关心它们的实现。您已经声明了一个具有类似于自动属性定义的语法的属性。
[ComVisible(true), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IMyObjects
{
float price { get; set; }
int size { get; set; }
}
您如何实施该属性完全取决于您。是的,在实现接口的类中使用自动属性是可以的。
[ComVisible(true), ClassInterface(ClassInterfaceType.None)]
public class MyObjects : IMyObjects {
public float price { get; set; }
public int size { get; set; }
}
请注意,COM类型库或本机代码中显示的 long 类型与C#中的 int 类型相同。
以下是接口的IDL定义(假设在命名空间CSDllCOMServer
内)
[
odl,
uuid(AA950E58-7C6E-4818-8FC9-ADECBC7A8F14),
version(1.0),
oleautomation,
custom(0F21F359-AB84-41E8-9A78-36D110E6D2F9, "CSDllCOMServer.MyIObjects")
]
interface MyIObjects : IUnknown {
[propget]
HRESULT _stdcall price([out, retval] single* pRetVal);
[propput]
HRESULT _stdcall price([in] single pRetVal);
[propget]
HRESULT _stdcall size([out, retval] long* pRetVal);
[propput]
HRESULT _stdcall size([in] long pRetVal);
};
答案 1 :(得分:0)
您可以在接口中声明属性!