有人在C#方法中有this
赋值的有用示例吗?在求职面试中我被要求过一次,我仍然有兴趣回答自己。
答案 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)
你不能覆盖“这个”。它指向当前的对象实例。