none
下面的get和set方法怎么是这样的定义?大家解释下? RRS feed

  • 问题

  •  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#代码?

    2010年10月14日 7:32

答案

  • 你好

    這是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
    2010年10月14日 7:37
    版主
  • 准确的讲,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
    2010年10月14日 9:59

全部回复

  • 你好

    這是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
    2010年10月14日 7:37
    版主
  • 那不是方法,是属性,所以无需括号。

    C# 的语法来的。

    2010年10月14日 8:22
  • 准确的讲,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
    2010年10月14日 9:59