2017-09-23 54 views
1

從C#果殼什麼是「A類型可以在關閉類型參數時將其自身命名爲具體類型」的含義?

關閉類型 參數時,A型可以自己的名字作爲具體類型

public interface IEquatable<T> { bool Equals (T obj); } 
public class Balloon : IEquatable<Balloon> 
{ 
    public string Color { get; set; } 
    public int CC { get; set; } 
    public bool Equals (Balloon b) 
    { 
    if (b == null) return false; 
    return b.Color == Color && b.CC == CC; 
    } 
} 

下也是合法的:

class Foo<T> where T : IComparable<T> { ... } 
class Bar<T> where T : Bar<T> { ... } 

「關閉類型參數時,A類型可以將其自身命名爲具體類型」是什麼意思? 你可以在示例中顯示它的位置嗎?

「具體類型」和「關閉類型參數」是什麼意思?

在這些例子中,沒有泛型類型的實例化,所以「類型參數」和「具體類型」在哪裏?

謝謝。

+2

我想它是指這個?:'IEquatable ' – David

回答

2

Balloon是一個具體類型。你可以使用它,以創建Balloon類型對象的實例如下:

var balloon = new Balloon 
{ 
    CC = 1; 
    Color = "Blue" 
}; 

在另一方面IEquatable<T>是一個通用的接口。每當類型實現此接口時,T將被此類型替換。

所以如果您希望自定義類型,稱爲Balloon實現這個接口,你就必須首先聲明,這個類如下實現它:

public class Balloon : IEquatable<Balloon> 

,你必須實現類的體內方法Equals。現在

注意,因爲這種方法的簽名如下:

bool Equals (T obj); 

你必須改變這樣的:

bool Equals(Balloon obj) 

,因爲現在Balloon是你的具體類型。

+0

謝謝。我應該如何理解最後兩個例子。 'Foo 其中T:IComparable {...}'和酒吧其中T:酒吧 {...}'? – Tim

+0

不客氣!我很高興我的幫助。關於第一個,您可以創建一個'Foo '類型的類,前提是您將使用的類型'T'實現'IComparable '接口。例如,您可以使用https://msdn.microsoft.com/en-us/library/4d7sx9hd(v=vs.110).aspx中定義的類「Temperature」,並實現「IComparable 」。這意味着你可以創建一個類型爲foo的類作爲'var fooTemperature = new Foo ();'。 – Christos

+0

關於第二種情況,可以使用的構造類型T應該從'Bar '繼承。舉例來說,我們有類公共類Example:Bar {}'。然後你可以使用這個類爲特定類型的'T'構造類型如下:'var bar = new Bar ();' – Christos

相關問題