2013-11-26 37 views
0

訪問類屬性與接口對象只是爲了我的好奇心

如果我有

ICollection<string> collection = new List<string>(); 

話,我想「收藏」將只能訪問那些在ICollection接口或其聲明的屬性祖先接口。這就是OOP的說法。

但實際上我們有權訪問List的所有屬性。爲什麼?

希望我不會在這裏問一些愚蠢的問題。我的假設是錯誤的。

編輯:讓我嘗試什麼我想要從IEnumerable<string>

public interface myInterface { 
     public void InterfaceMethod(); 
    } 
    public class MyClass : myInterface 
    { 
     public MyClass() 
     { 
     } 
     public void InterfaceMethod() 
     { 
      Console.WriteLine("InterfaceMethod called"); 
     } 
     public void AnotherMethod() { 
      Console.WriteLine("AnotherMethod called"); 
     } 
    } 

public class Program 
{ 
    private static IContainer Container { get; set; } 
    static void Main(string[] args) 
    { 
     myInterface myObject = new MyClass(); 
     myObject.InterfaceMethod(); 
     myObject.AnotherMethod(); //Now myObject is not aware of AnotherMethod, which is correct 
    } 
} 
+0

顯示一些例子你是什麼意思'但實際上我們有訪問列表的所有屬性。爲什麼?' –

+0

這是一個泛化,但你可以考慮ICollection 作爲一個圍繞T []構建的接口,即一個T數組。你是否想知道爲什麼T []對象允許你訪問它擁有的所有Ts? –

+0

在Visual Studio中,只需在集合旁邊寫點,您將看到列出的所有方法,但在F12上ICollection中,您將看到很少的方法。 –

回答

0

ICollection<string>繼承,這是在這兩因爲List<string>還繼承IEnumerable<string>

ICollection<T> : IEnumerable<T>,IEnumerable 

和共享也許你感到困惑的屬性

List<T> : IList<T>, ICollection<T>, IEnumerable<T>, IList, ICollection, IEnumerable 
+0

要迂迴..'ICollection :IEnumerable ,IEnumerable' –

+0

謝謝我會相應地更新 – liquidsnake786