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. }