2012-01-24 5 views
5

私はいくつかのレガシーコードを探していました。VB.NETインターフェイスインスタンシエーション奇妙な

具体的なクラスTestClassがあるとします。 TestClassは、インターフェイスITestClassを実装しています。

次の場合、どのような動作が必要ですか?

Dim testClass as TestClass = Nothing 
Try 
    testClass = New ITestClass 
    ... 
End Try 

(私はこれが可能だったとしても気づいていなかった)私の知る限り理解し、あなたの代わりにそのインターフェース相手のTestClassを利用することを余儀なくされるだろう。

+0

あなたはITestClass'がインターフェイスである '_certain_ていますか?あなたはそれのためのコードを投稿できますか? – Oded

+0

Visual Studioで 'ITestClass'の上にカーソルを置くと、ツールチップにはインターフェースと表示されます。 'TestClass'の上にマウスを置くと、それはクラスだと言います。 –

答えて

8

特別なケースです。インターフェイスはクラスのようにインスタンス化でき、CoClassAttributeに関連しています。詳細については、このブログ記事を参照してください:VBに翻訳されたブログの記事から

例:

<ComImport(), Guid("C906C002-B214-40d7-8941-F223868B39A5"), CoClass(GetType(Foo))> _ 
Public Interface IFoo 
End Interface 

Public Class Foo 
    Implements IFoo 
End Class 

Sub Main() 
    Dim f As New IFoo() ' Compiles 
End Sub 
+4

うわー。どのような言語の機能の奇形:) – Oded

+0

うわー...私はDLLに反映され、それはまさに何が起こっているのです。それは変です。 –

+0

私は長い間、 "co-class"という概念がインターフェースとペアになっているべきだと考えました。 *コンシューマ*の観点からは、インターフェイスとクラスの唯一の違いは、インターフェイスが静的メソッドまたはコンストラクタを持つことができないということです。私の心には、そこに何か違いがあることを要求しないようにするのがきれいになるでしょう。共同クラスで静的メソッドを利用できるようにすることはできますか?余分な輸入を必要とせずにインターフェイス上で利用可能な拡張メソッドを作成するそのような共同クラスのための任意の合理的なパターンがありますか? – supercat