2012-03-05 65 views
2

有一個簡單的問題,看起來很簡單,但我一直在尋找原因無法恢復。類可以使用基類名稱空間的屬性

  1. 如果我已導入在基類命名空間我可以使用名稱空間(類,對象,方法等)的所有派生類的屬性?

例如

using System.Collections.Generic; 
public class MyBase 
{ 
    public string GetName() 
     { 
      List<string> ss = new List<string>(); 
      return ss.ToString(); 
     } 
} 

我可以使用列表屬性從我的基地,具有命名空間進行歸類所有的孩子呢?像

public class myChild : MyBase 
    { 
     public string GetName() 
     { 
      List<string> ss = new List<string>(); 
      return ss.ToString(); 
     } 
    } 

如果不是爲什麼?同樣的行爲,我已經注意到在部分類..可以解釋一下這個背後的原因嗎?

+1

你試過上面的代碼嗎?它編譯了嗎?你是否從編譯器收到警告或錯誤?如果編譯的代碼,按照預期做的結果彙編函數?你說,「我在部分班級中注意到了同樣的行爲」:這是什麼行爲?你已經提出了一些關於行爲的問題,但是你沒有描述你觀察到的任何行爲。 – phoog 2012-03-05 23:32:37

回答

3

這聽起來像你問以下​​

如果父類型在導入一個命名空間的文件中定義的,做我,如果我從父派生重新導入該命名空間?

如果答案是肯定的。子類型不會繼承在定義父類型的文件中導入的名稱空間(部分原因是由於使用partial類型,可以在具有衝突命名空間的多個文件中定義類型)。每個文件都是基於它自己的一組導入進行編譯的。

2

using語句不是可執行代碼,它們不適用於類或類的成員。相反,他們給編譯器提供了有關如何解析類型名稱的信息。一條using語句只在包含它的文件的範圍內;此外,如果它位於命名空間聲明中,則僅在該命名空間聲明中有效。

注意,它可能在一個文件中多個命名空間聲明,所以:

namespace N 
{ 
    using System.IO; 
    partial class C 
    { 
     public FileInfo SomeFileInfo { get; set; } 
    } 
} 

namespace N 
{ 
    partial class C 
    { 
     public DirectoryInfo SomeDirectoryInfo { get; set; } 
    } 
} 

DirectoryInfo參考不能得到解決,因爲using System.IO;不在範圍內,在這一點上。

+0

隨機放在一邊,使用語句確實出現在PDB中。它放在那裏以方便調試體驗 – JaredPar 2012-03-05 23:37:20

相關問題