2012-10-31 19 views
0

在.NET中,在mscorlib中有一個名爲System.Text.Encoding的類。但是當你做System.Text.Encoding.ASCII時,你可以訪問ASCII編碼類。System.Text.Encoding類如何工作?

起初,我thiught這是一類這樣的事情類:

class Encoding { 
    class ASCII { ... } 
    ... 
} 

但令人困惑的是,你還可以使用System.Text.ASCIIEncoding訪問相同的功能。不能反編譯.NET(因爲.NET反射器花錢,我不理解IL [那麼ildasm]),我無法圍繞兩個類是如何平等的。它可能是這樣的嗎?

class ASCIIEncoding { 
    internal ASCIIEncoding() { ... } 
    /* static functions */ 
} 
static class Encoding { 
    public static readonly ASCIIEncoding ASCII = new ASCIIEncoding(); 
    ... 
} 

這似乎是最有可能的方式,但函數原型爲

public static Encoding ASCII { get; } 

返回從Encoding deriviated無厘頭類的編碼與編碼類型類(ASCII, UTF-(7/8/16/32)等),這意味着ASCIIEncoding也需要這些變量,否?

任何人都可以幫助澄清這種困惑?

+1

對於.NET源代碼,請參閱:http://referencesource.microsoft.com/netframework.aspx –

+0

在移動設備上開發軟件? –

回答

3

返回從編碼派生的類沒有意義,因爲編碼是帶有編碼類型(ASCII,UTF-(7/8/16/32)等)的類,所以這意味着ASCIIE編碼還需要這些變量,不是嗎?

沒有,因爲等都是靜態性能,通過靜態領域可能的支持(儘管這是一個實現細節 - 屬性可能只需要創建一個新的實例每次,或者有可能是一個靜態的內場它使用的ASCIIEncoding等)。

這就像這樣:

public class BaseClass 
{ 
    private readonly static BaseClass firstDerived = new FirstDerived(); 
    private readonly static BaseClass secondDerived = new SecondDerived(); 

    public static BaseClass First 
    { 
     get { return firstDerived; } 
    } 

    public static BaseClass Second 
    { 
     get { return secondDerived; } 
    } 
} 

public class FirstDerived : BaseClass {} 
public class SecondDerived : BaseClass {} 

這是完整的代碼 - 儘管無用的派生類的條款實際上什麼。請確保你瞭解每一點如何工作,然後將其應用於Encoding ...