visual versiones language guide c# language-features

versiones - ¿Qué es un ejemplo de "esta" tarea en C#?



manual de c# (7)

"this" es una referencia a la instancia de clase actual. Si tiene un método no estático en una clase, puede referirse a la instancia de clase actual usando esto:

public class MyClass{ public string SomeProperty {get;set;} public void GetSomeProperty(){ return this.SomeProperty; } }

¿Alguien tiene un ejemplo útil de this tarea dentro de un método de C #? Me lo pidieron una vez durante la entrevista de trabajo, y todavía estoy interesado en responderme.


Las otras respuestas son incorrectas cuando dicen que no se puede asignar a ''esto''. Es cierto que no puede para un tipo de clase, pero puede hacerlo para un tipo de estructura:

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

En cualquier punto, una estructura puede alterarse asignando a ''esto'' como tal.


No puede sobrescribir "esto". Apunta a la instancia del objeto actual.


el uso de la palabra clave this garantiza que solo se acceda a las variables y métodos con ámbito en el tipo actual. Esto se puede usar cuando tiene un conflicto de nomenclatura entre un campo / propiedad y una variable local o parámetro de método.

Típicamente utilizado en constructores:

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

En este ejemplo asignamos el proveedor de parámetros al proveedor de campo privado.


si se le pide que asigne algo a esto , hay bastantes ejemplos. Uno que viene a la mente es decirle a un control quién es su padre:

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


solo el lugar correcto para esto desde el punto de vista de la sintaxis, son los métodos de Extensión en C # 3.0 cuando se especifica el primer parámetro del método como foo (ftype this, ...). y luego puede usar esta extensión para cualquier instancia de ftype. Pero es solo una sintaxis y no es real esta operación adicional.


Sé que esta pregunta se ha respondido durante mucho tiempo y la discusión se ha detenido, pero aquí hay un caso que no vi mencionar en ningún lugar en las redes internas y pensé que podría ser útil compartirlo aquí.

Lo he usado para mantener la inmutabilidad de los miembros mientras sigo apoyando la serialización. Considere una struct definida así:

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 }

Como podemos sobrescribir this , podemos mantener la inmutabilidad de _data en una sola instancia. Esto tiene el beneficio adicional de que al deserializar nuevos valores se garantiza una nueva instancia, que a veces es una buena garantía. }