C#中“this”赋值的示例是什么?

时间:2008-09-16 06:37:37

标签: c# language-features

有人在C#方法中有this赋值的有用示例吗?在求职面试中我被要求过一次,我仍然有兴趣回答自己。

6 个答案:

答案 0 :(得分:42)

当他们说你不能分配给'this'时,其他答案是不正确的。没错,你不能用于类类型,但可以用于结构类型:

public struct MyValueType
{
    public int Id;
    public void Swap(ref MyValueType other)
    {
        MyValueType temp = this;
        this = other;
        other = temp;
    }
}

任何时候结构都可以通过像这样指定'this'来改变自己。

答案 1 :(得分:0)

使用 this 关键字可确保只访问当前类型范围内的变量和方法。当字段/属性与局部变量或方法参数之间存在命名冲突时,可以使用此方法。

通常用于构造函数:

private readonly IProvider provider;
public MyClass(IProvider provider)
{
  this.provider = provider;
}

在此示例中,我们将参数提供程序分配给私有字段提供程序。

答案 2 :(得分:-1)

从语法的角度来看,只有正确的位置,当你将方法的第一个参数指定为foo(ftype this,...)时,是C#3.0中的扩展方法。然后可以将此扩展名用于任何ftype实例。但这只是语法,而不是真正的这种操作。

答案 3 :(得分:-1)

如果你被要求为这个分配一些东西,那么就有很多例子。想到的是告诉控制者他的父亲是谁:

class frmMain
{
    void InitializeComponents()
    {
        btnOK = new Button();
        btnOK.Parent = this;
    }
}

答案 4 :(得分:-1)

我知道这个问题早已得到解答,讨论已经停止,但这是一个我在网站上没有看到的情况,并认为在这里分享可能会有用。

我使用它来保持成员的不变性,同时仍然支持序列化。考虑这样定义的struct

public struct SampleStruct : IXmlSerializable
{
    private readonly int _data;

    public int Data { get { return _data; } }

    public SampleStruct(int data)
    {
         _data = data;
    }

    #region IXmlSerializableMembers

    public XmlSchema GetSchema() { return null; }

    public void ReadXml(XmlReader reader)
    {
        this = new SampleStruct(int.Parse(reader.ReadString()));
    }

    public void WriteXml(XmlWriter writer
    {
        writer.WriteString(data.ToString());
    }

    #endregion
}

由于我们允许覆盖this,因此我们可以保持单个实例中_data的不变性。这有一个额外的好处,当反序列化新值时,你可以保证一个新的实例,这有时是一个很好的保证!     }

答案 5 :(得分:-2)

你不能覆盖“这个”。它指向当前的对象实例。