快速业务通道

C++:最强大的.NET语言之可访问性

作者 佚名技术 来源 程序设计 浏览 发布时间 2012-06-30
CLR定义了一些用于访问存取的修饰成分,其作用超越了本地C++中类成员函数与变量的对等物(如:public、private、protected),不仅如此,甚至还能定义命名空间或嵌套类型的可访问性。为了让C++/CLI达到作为低级语言的目标,除访问性之外,它还提供了比其他CLR平台高级语言更多的控制。

  本地C++可访问性与CLR中定义的可访问性相比,其最大不同之处在于:本地C++访问指示符通常用于限制同一程序中从其他代码访问类成员;而CLR定义的类型和成员的可访问性,不只是针对同一程序集中的其他代码,还针对从其他程序集中引用它的代码。

  一个命名空间,或非嵌套类型,如class或delegate类型,可在类型定义之前,通过加上public或private关键字来指定程序集之外的可见度。

public ref class ReferenceType {};
   如果显式地指定了可见度,对程序集来说,类型会被假定为私有类型(private)。

  类成员的访问指示符同样也被扩展,以允许一起使用两个关键字来指定来自内部和外部的访问。在这两个关键字中,限制更多的一者定义了来自程序集外的访问性,而另外一个则定义了程序集内的访问性。如果只用了一个关键字,那它将同时作用于内部与外部的访问性。这种设计思想对定义类型与类成员的可访问性提供了巨大的弹性,以下是示例:

public ref class ReferenceType
{
public:
//程序集内部与外部均可见
private public:
//只对程序集内部可见
protected public:
//对程序集内所有代码可见;对外部继承类型可见
};
  属性

  除嵌套类型之外,CLR类型只能包含方法与字段。为了让程序员更清楚地表达代码内涵,可使用元数据来指明某特定的方法将被编程语言当作属性。严格来说,一个CLR属性是它的包含类的一个成员,然而,属性没有分配的存储空间,它只是实现属性的各自方法的一个命名引用,而不同的编译器,碰到源代码中有关属性的语法时,将会生成各自所需的元数据。这就是说,类型的使用者,可在它们的语言中使用属性语法,来访问实现属性的get和set方法。与本地C++相比,C#对属性支持最好。

public string Name
{
get
{
return m_name;
}
set
{
m_name = value;
}
}
  C#编译器会生成对应的get_Name与set_Name方法,并且也会包含必要的元数据以指明其联系。在托管C++中,引入了关键字__property来指明一个在语义上实现属性的方法。

__property String* get_Name()
{
return m_value;
}
__property String* set_Name(String* value)
{
m_value = value;
}
  很明显,这不是理想的情况,不但需要使用这个"难看"的__property关键字,而且此处没有任何东西清楚地指明这两个成员函数实际上的联系,这在维护期间,会导致难以捉摸的bug。C++/CLI在对属性的设计上,就显得简明多了,更接近于C#的设计,而且你还会发现,这更强大。

property String^ Name
{
String^ get()
{
return m_value;
}
void set(String^ value)
{
m_value = value;
}
}
  这是一个非常大的改进,由编译器负责生成get_Name与set_Name方法和在此属性中声明的必要的元数据。更好的是,此属性值可对程序集外部保持只读,而对程序集内部为可写,也可以在紧接着属性名的花括号中使用访问指示符来达到这一目的。

property String^ Name
{
public:
String^ get();
private public:
void set(String^);
}
  最后一点无关痛痒的事是,在那此不需要对属性中get和set作特殊处理的地方,也可以使用简略表示法。

property String^ Name;
  再次提醒,编译器会生成get_Name与set_Name方法,但是这个时候,也会提供一个由private String ^ 成员变量支持的默认实现。其好处是,你可在将来某个时刻,用其他某种实现,来替换掉此处的简易属性,并且不会破坏类的接口。

代理

   本地C++中的函数指针,提供了一种异步执行

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号