[属性(property)]问题

OOPhaisky 2006-09-26 07:11:53
a.cs:
----------------------------------------------------------------------------
using System;
namespace ns_1
{
public class Class_1
{
private Int32 _Age;
public Int32 Age
{
get{ return _Age; }
set{ _Age = value; }
}
}
}
----------------------------------------------------------------------------
先将a.cs编译成a.dll文件。注意Class_1中的属性Age编译后会产生一个get_Age方法(用ildasm可以看到),我在下面的b.cs中试图显式调用这个get_Age方法。
b.cs:
----------------------------------------------------------------------------
using System;
using ns_1;//引入a.cs中的ns_1名称空间
namespace ConsoleApplication2
{
class Class1
{
static void Main(string[] args)
{
Class_1 c1 = new Class_1();
Console.WriteLine(c1.get_Age());//显式调用属性Age编译后生成的get_Age()方法
}
}
}
----------------------------------------------------------------------------
编译b.cs:
csc b.cs /r:a.dll
出错:
error CS0571: “ns_1.Class_1.Age.get” : 无法显式调用运算符或访问器

我想知道为什么会这样?我认为应该可以直接访问get_xxx方法的,因为如果某种语言不支持“属性”,那么它们只能通过显式调用get_xxx(或者set_xxx)方法来达到访问相应属性的目的。
百思不得其解,望高手指点,谢谢。
...全文
138 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Knight94 2006-09-27
  • 打赏
  • 举报
回复
change
Console.WriteLine(c1.get_Age());//显式调用属性Age编译后生成的get_Age()方法

with
Console.WriteLine(c1.Age);//显式调用属性Age编译后生成的get_Age()方法

ref:
《Effective C#》Item 1:用属性来访问类的私有成员
http://blog.csdn.net/knight94/archive/2006/06/04/772886.aspx
jackyped 2006-09-27
  • 打赏
  • 举报
回复
属性是.net才有的
VC只有字段和方法
Knight94 2006-09-27
  • 打赏
  • 举报
回复
to c1.Age可以访问属性我知道,但是我就是想知道为什么不可以通过c1.get_Age()来访问?

get_Age和set_Age是.net编译器对于Age属性转化的IL,但并不意味着这是可以被显示调用的。
OOPhaisky 2006-09-27
  • 打赏
  • 举报
回复
to Knight94(愚翁):

c1.Age可以访问属性我知道,但是我就是想知道为什么不可以通过c1.get_Age()来访问?
antoniusguo 2006-09-26
  • 打赏
  • 举报
回复
C#编译器的限制
VC.NET可以访问get

110,570

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧