6

.NET CLRが内部でインターフェイスを処理する方法に興味がありますか?

Q1] CLRが次のようなものに遭遇するとどうなりますか?

簡単なインターフェースの例。(以下で使用するものと同じです。)

interface ISampleInterface
    {
        void SampleMethod();
    }

    class ImplementationClass : ISampleInterface
    {
        // Explicit interface member implementation: 
        public void SampleMethod()
        {
            // Method implementation.

        }

        static void Main()
        {
            //Declare an interface instance.
            ISampleInterface mySampleIntobj = new ImplementationClass();  // (A)
           // Call the member.
            mySampleIntobj.SampleMethod();

            // Declare an interface instance. 
            ImplementationClass myClassObj = new ImplementationClass();  // (B)
           //Call the member.
            myClassObj.SampleMethod();

        }
    }

Q2:上記の例では、 (A)(B)はどのように区別されますか?

Q3:ジェネリックインターフェイスの扱いは異なりますか?

(このような基本的な質問をするときは、初心者のように感じてください...とにかく....)

すべてのThx。

4

2 に答える 2

2

これらのコードには実質的に違いはありません。どちらも同じ関数を呼び出すことになります。クラス型を介してメソッドを呼び出すと、パフォーマンスがわずかに向上する場合があります。

これらがどのように実装されているか知りたい場合は、Virtual Method Tablesをご覧ください。

詳細については、こちらを参照してください。

于 2010-07-16T13:51:44.760 に答える
-5

オブジェクト参照の作成中にインターフェイスを使用することは、クラス型で直接インスタンス化するよりも優れた方法と見なされます。これは、インターフェース原理へのプログラミングの下にあります。

これは、実行時に依存性注入などを使用して、またはリフレクションでさえある可能性がある、同じインターフェイスを実装する具象クラスを変更できることを意味します。インターフェイスをプログラミングする場合は、具体的な型をプログラミングする場合と比較して、コードを変更する必要はありません。

于 2010-07-18T14:19:46.423 に答える