繁体   English   中英

在C#中,“ this”分配的示例是什么?

[英]What is an example of “this” assignment in C#?

有人在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;
}

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

我知道这个问题早已得到解答,讨论已经停止,但是在这种情况下,我在互联网上的任何地方都没有看到任何提及,并且认为在此处分享可能很有用。

我使用它来维护成员的不变性,同时仍支持序列化。 考虑这样定义的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的不变性。 反序列化新值时,可以确保获得一个新实例,这有时是一个很好的保证! }

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

如果你要求分配的东西这个 ,有相当多的例子。 我想到的是告诉控制对象他的父亲是谁:

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

您不能覆盖“此”。 它指向当前的对象实例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM