重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这个貌似是属性语法错了吧……
创新互联建站坚持“要么做到,要么别承诺”的工作理念,服务领域包括:网站制作、成都网站设计、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的北碚网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
应该这样写,绝对不会有问题
Property ReadMonth
Get
Return ……
End Get
Set(value As Month)
…… = value
End Set
End Property
Property ... (... As ...)这么写是错的
不能的,在 VB 中 Open 只能是关键字,
在调用时如果某一过程名不符合 VB 的要求,则需要在其两侧加方括号:
Dim MyCollection As New Collection
Dim NextEnum As Object
Set NextEnum = MyCollection.[_NewEnum]
照理说,与关键字可能发生冲突,也需要加方括号,
但我试了一下,实际不用。
可是,如果在声明一个不符合 VB 的要求的过程名称时,
加方括号却遇到了问题:
Public Sub [Open]() '编译错误
因此 VB 6.0(或是 VBA 6.0)是不支持声明不符合要求的过程名称的。
但在 VB.NET 中是可以的(虽然这么做不被推荐),例如:
Public Sub [Sub]()
Public Function [Property]() As Object
Dim [___] As Long
不过目前还没有见到 VB.NET 取代 VBA 的位置。
除过在 Office 2010 的 InfoPath 中的代码可以在 VB.NET 环境中编辑以外,
甚至 Office 2010 的 Word 还在用 VBA 6.0……
而至于人家 Workbooks,
因为人家用的不是 VB,而是 C,
因此没有这么严格的限制。
所以只能将就一下了……
起个 OpenWorkbook 或是 OpenSheet 之类的,
只要避开关键字就行……
这个功能实现起来其实也很简单,就是通过反射去读取 DescriptionAttribute 的 Description 属性的值,代码如下所示:
/// summary
/// 返回枚举项的描述信息。
/// /summary
/// param name="value"要获取描述信息的枚举项。/param
/// returns枚举想的描述信息。/returns
public static string GetDescription(Enum value)
{
Type enumType = value.GetType();
// 获取枚举常数名称。
string name = Enum.GetName(enumType, value);
if (name != null)
{
// 获取枚举字段。
FieldInfo fieldInfo = enumType.GetField(name);
if (fieldInfo != null)
{
// 获取描述的属性。
DescriptionAttribute attr = Attribute.GetCustomAttribute(fieldInfo,
typeof(DescriptionAttribute), false) as DescriptionAttribute;
if (attr != null)
{
return attr.Description;
}
}
}
return null;
}
这段代码还是很容易看懂的,这里取得枚举常数的名称使用的是 Enum.GetName() 而不是 ToString(),因为前者更快,而且对于不是枚举常数的值会返回 null,不用进行额外的反射。
当然,这段代码仅是一个简单的示例,接下来会进行更详细的分析。