none
屬性(property)是對象, 還是get / set 函數? RRS feed

  • 问题

  • httpRequest.Headers.Add("Authorization",

    "Basic" + Convert.ToBase64String(new System.Text.ASCIIEncoding().GetBytes(usernamePassword)));

    我的理解是 成員函數. Add(...) 是跟在 類 後面的 如: 對象名 . 成員

    Headers 是屬性, 如果屬性是get / set 函數, 那麼 函數 是不會有 成員 的,

    因為 成員(Add) 只有 類 才有

    求高人指出理解錯處!!









    • 已编辑 慕容嘉美 2012年4月26日 7:11
    • 已移动 Helen Zhao 2012年4月26日 8:09 (发件人:Visual C++)
    2012年4月25日 6:10

答案

  • 是的,属性只能使用“=”进行赋值。可是你是否考虑过如果这个属性返回的是一个类的实体,那么这个实体具备某个方法呢?

    证明——使用反射代码工具查看:

    public NameValueCollection Headers
    {
        get
        {
            this.EnsureHeaders();
            if (this._flags[8])
            {
                this._flags.Clear(8);
                this.ValidateHttpValueCollection(this._headers, RequestValidationSource.Headers);
            }
            if (this._flags[65536])
            {
                this._flags.Clear(65536);
                this.ValidateCookielessHeaderIfRequiredByConfig(this._headers["AspFilterSessionId"]);
            }
            return this._headers;
        }
    }
    因为Headers是NameValueCollection,所以肯定有Add方法。

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年4月26日 8:15
    版主
  • C#提供的属性 { get; set; } 其实和Java中手动实现getter和setter方法是类似的,例如:

    Collection<T> GetXXX()

    void SetXXX(Collection<T>)

    实际上操作的都是类中的私有成员。这一点可以通过查看编译后的代码得知。

    当调用GetXXX()方法时,实际上返回了一个指向Collection<T>类型实例的引用,而这个Collection<T>类型"恰好"有一些成员,比如Add(T)、Count、Items等等,所以你就可以直接通过getter来操作这个对象了。

    说的再简单些,方法(函数)没有成员,但是方法的返回值有


    共同努力,共同提高
    kaedei#live.cn My BLOG

    2012年4月27日 3:11

全部回复

  • horaintom你好,

    这个是C#的问题,所以我要把它移到Visual C# 论坛。

    谢谢你的谅解!


    Helen Zhao [MSFT]
    MSDN Community Support | Feedback to us

    2012年4月26日 8:09
  • 是的,属性只能使用“=”进行赋值。可是你是否考虑过如果这个属性返回的是一个类的实体,那么这个实体具备某个方法呢?

    证明——使用反射代码工具查看:

    public NameValueCollection Headers
    {
        get
        {
            this.EnsureHeaders();
            if (this._flags[8])
            {
                this._flags.Clear(8);
                this.ValidateHttpValueCollection(this._headers, RequestValidationSource.Headers);
            }
            if (this._flags[65536])
            {
                this._flags.Clear(65536);
                this.ValidateCookielessHeaderIfRequiredByConfig(this._headers["AspFilterSessionId"]);
            }
            return this._headers;
        }
    }
    因为Headers是NameValueCollection,所以肯定有Add方法。

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年4月26日 8:15
    版主
  •  我以為是C++/CLI 呢, 只看這一語句, 從哪裡看出是C# ?

    如果要實現同樣的功能, C++/CLI 的語句又是什麼?

    謝謝!!

    2012年4月26日 8:37
  •  我以為是C++/CLI 呢, 只看這一語句, 從哪裡看出是C# ?

    如果要實現同樣的功能, C++/CLI 的語句又是什麼?

    謝謝!!

    C++的写法是类似:

    httpRequest::Headers->Add(参数…………);


       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年4月26日 8:54
    版主
  • C#提供的属性 { get; set; } 其实和Java中手动实现getter和setter方法是类似的,例如:

    Collection<T> GetXXX()

    void SetXXX(Collection<T>)

    实际上操作的都是类中的私有成员。这一点可以通过查看编译后的代码得知。

    当调用GetXXX()方法时,实际上返回了一个指向Collection<T>类型实例的引用,而这个Collection<T>类型"恰好"有一些成员,比如Add(T)、Count、Items等等,所以你就可以直接通过getter来操作这个对象了。

    说的再简单些,方法(函数)没有成员,但是方法的返回值有


    共同努力,共同提高
    kaedei#live.cn My BLOG

    2012年4月27日 3:11