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)方法来达到访问相应属性的目的。
百思不得其解,望高手指点,谢谢。

解决方案 »

  1.   

    C#编译器的限制
    VC.NET可以访问get
      

  2.   

    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
      

  3.   

    to Knight94(愚翁):   c1.Age可以访问属性我知道,但是我就是想知道为什么不可以通过c1.get_Age()来访问?
      

  4.   

    to c1.Age可以访问属性我知道,但是我就是想知道为什么不可以通过c1.get_Age()来访问?get_Age和set_Age是.net编译器对于Age属性转化的IL,但并不意味着这是可以被显示调用的。
      

  5.   

    属性是.net才有的
    VC只有字段和方法