2008-09-16 58 views

回答

42

其他的答案是不正確的,當他們說你不能分配給「這」。的確,你不能爲類類型,但你可以的結構類型

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

在任何時候,一個struct可以通過分配給「這」像這樣改變自己。

+7

每天學習新的東西... – 2008-09-16 07:42:27

+1

哦,這是因爲作爲一個結構它是一個值類型,賦值運算符=值類型複製值。 – 2008-09-16 07:44:13

-1

你不能覆蓋「this」。它指向當前的對象實例。

+0

不適用於值類型。 – jnm2 2016-01-08 18:02:13

-1

從語法的角度來看,這只是正確的地方,是指定方法的第一個參數爲foo(ftype this,...)時C#3.0中的擴展方法。然後可以將此擴展用於ftype的任何實例。但是,這只是語法,並不是真正的這個ovveride操作。

+0

不正確。值類型可以分配給`this`,並且沒有其他語法。 – jnm2 2016-01-08 18:03:48

0

使用關鍵字可確保只訪問當前類型的變量和方法。這可以在字段/屬性與局部變量或方法參數之間存在命名衝突時使用。

在構造通常用於:

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

在這個例子中,我們指定參數提供給私人領域的供應商。

+0

不是分配給`this`的例子。 – jnm2 2016-01-08 18:01:55

-1

如果您被要求指定這個,有不少例子。想到一個控制他的爸爸是誰:

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

不是分配給`this`的例子。 – jnm2 2016-01-08 18:01:42

-1

「this」是對當前類實例的引用。如果你有一個非靜態方法的類,你可以參考使用這個當前類的實例:

public class MyClass{ 

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

} 
+0

不是分配給`this`的例子。 – jnm2 2016-01-08 18:01:10

-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的單個實例中舉行的不變性。這有額外的好處,當反序列化新的值時,你保證一個新的實例,這有時是一個很好的保證! }