积极答复者
下面的get和set方法怎么是这样的定义?大家解释下?

问题
-
public class Client
{
string name;
Socket clSocket;
public Client(string _name, Socket _socket)
{
name = _name;
clSocket = _socket;
}
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
public Socket clientSocket
{
get
{
return clSocket;
}
set
{
clSocket = value;
}
}
}上面的set和get方法怎么这样定义的,方法后面不是有()吗?这是visual studio C#代码?
答案
-
你好
這是CSHARP 的 CODE
因為這是Properties 所以不用 () 吧或者你可以參考以下URL
http://msdn.microsoft.com/zh-cn/library/w86s7x04(v=VS.100).aspx
Please correct me if my concept is wrong
Chi- 已建议为答案 小歐ouMVP 2010年10月14日 7:40
- 已标记为答案 BoberSongModerator 2010年10月20日 6:27
-
准确的讲,get 和 set 是一种 C# 的语法糖。它的作用是为一个属性定义其 getter 和 setter。只是一种语法形态。
在回复中有人说属性的 get 和 set 不是方法的问题,我要纠正一下,get 和 set 是方法,编译时,对于属性的访问,都会被转化成相应的方法。如下面的代码:
string myName = myUser.Name;
就会被替换成:
string myName = myUser.get_Name();
而
myUser.Name = string.Empty;
会被替换成:
myUser.set_Name(string.Empty);
另外,各种不同的语言对定义 getter 和 setter 的方式不同,如 Visual Basic:
Public Property Name As String
Get
Return Me._name
End Get
Set(ByVal value As String)
Me._name = value
End Set
End Property这里,很容易就知道,Set 是方法。C++/CLI 就更明显了:
public:
property String^ Name
{
String^ get()
{
return this->_name;
}
void set(String^ value)
{
this->_name = value;
}
}虽然,get 和 set 被替换成了方法调用,但同时 CLR 知道属性的存在。因为在编译好的 IL 的元数据中有 PropertyRef 表。这些信息可以用来被用作反射元数据。
希望这个解释对您有帮助。
Mark Zhou- 已建议为答案 mazhou 2010年10月14日 10:08
- 已标记为答案 BoberSongModerator 2010年10月20日 6:27
全部回复
-
你好
這是CSHARP 的 CODE
因為這是Properties 所以不用 () 吧或者你可以參考以下URL
http://msdn.microsoft.com/zh-cn/library/w86s7x04(v=VS.100).aspx
Please correct me if my concept is wrong
Chi- 已建议为答案 小歐ouMVP 2010年10月14日 7:40
- 已标记为答案 BoberSongModerator 2010年10月20日 6:27
-
准确的讲,get 和 set 是一种 C# 的语法糖。它的作用是为一个属性定义其 getter 和 setter。只是一种语法形态。
在回复中有人说属性的 get 和 set 不是方法的问题,我要纠正一下,get 和 set 是方法,编译时,对于属性的访问,都会被转化成相应的方法。如下面的代码:
string myName = myUser.Name;
就会被替换成:
string myName = myUser.get_Name();
而
myUser.Name = string.Empty;
会被替换成:
myUser.set_Name(string.Empty);
另外,各种不同的语言对定义 getter 和 setter 的方式不同,如 Visual Basic:
Public Property Name As String
Get
Return Me._name
End Get
Set(ByVal value As String)
Me._name = value
End Set
End Property这里,很容易就知道,Set 是方法。C++/CLI 就更明显了:
public:
property String^ Name
{
String^ get()
{
return this->_name;
}
void set(String^ value)
{
this->_name = value;
}
}虽然,get 和 set 被替换成了方法调用,但同时 CLR 知道属性的存在。因为在编译好的 IL 的元数据中有 PropertyRef 表。这些信息可以用来被用作反射元数据。
希望这个解释对您有帮助。
Mark Zhou- 已建议为答案 mazhou 2010年10月14日 10:08
- 已标记为答案 BoberSongModerator 2010年10月20日 6:27