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

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

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

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

在任何时候,结构都可以通过像这样分配给’this’来改变自己。

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

通常用于构造函数:

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

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

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

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

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

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

我已经用它来保持成员的不变性,同时仍然支持序列化。 考虑一个像这样定义的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在单个实例中的不变性。 这有一个额外的好处,当反序列化新值时,你可以保证一个新的实例,这有时是一个很好的保证! }

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