0

System.Text.Encoding.NET にはinというクラスがありますmscorlib。ただし、 を実行するSystem.Text.Encoding.ASCIIと、ASCII エンコーディング クラスにアクセスできます。

最初は、これはクラスの中のクラスのようなものだと思っていました:

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

しかし、紛らわしいのは、 を使用System.Text.ASCIIEncodingして同じ機能にアクセスできることです。

.NET を逆コンパイルできない (.NET Reflector にはお金がかかり、IL をよく理解していないため [ildasm がない])、2 つのクラスがどのように等しいかについて頭を悩ませることはできません。このようなものでしょうか?

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

これは最も可能性の高い方法のように思えますが、関数のプロトタイプは

public static Encoding ASCII { get; }

Encoding は Encoding タイプ (ASCII、UTF-(7/8/16/32) など) を持つクラスであるため、派生したクラスを返すEncodingことは意味がありません。つまり、ASCIIEncodingこれらの変数も必要になるということですよね?

誰でもこの混乱を解消するのを助けることができますか?

4

1 に答える 1

3

Encoding は Encoding 型 (ASCII、UTF-(7/8/16/32) など) を持つクラスであるため、Encoding から派生したクラスを返すことは意味がありません。番号?

いいえ、Encoding.ASCIIetc は静的プロパティであり、おそらく静的フィールドによってサポートされているためです (これは実装の詳細ですが、プロパティは毎回新しいインスタンスを作成するか、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...

于 2012-10-31T17:48:50.830 に答える