2017-10-06 3 views
1

私のSDKに特定の種類の新しいクラスを作成しようとするとメッセージが表示されます。現在、私はこれらのコメントで、クラスのすべてのプロパティを持っている: 使用しようとしているときに実装されていないメッセージが表示されます(抽象度?)

/// <summary> 
/// This class and its use is not implemented in (my) SDK 
/// </summary> 

のみ2つの方法がありますし、SDKの使用者は、使用時にそれらを

しかし、これだけのショーにアクセスする必要はありません

インテリセンスは、クラスのプロパティを超えています。 私は抽象としてクラスを設定した場合は、新しいインスタンスを作成しようとしたとき、私はこれを取得:

Cannot create an instance of the abstract class or interface 'MyClass1' 

それは、開発者がクラスが機能するので、インスタンス化することができないことを知らせるために、どのような方法で、可能でしょうSDKで実装されていないクラスを使用していますか? [NotImplemented]属性の行に沿った何か、おそらく??

+0

おそらく 'Obsolete'属性ですか?あなたが探しているものではありませんが、開発者が使ってはいけないというコンパイラの警告が出るでしょう – DiskJunky

+0

cassの機能はSDKに入れられていないので、 '[Obsolete]'は本当にisn私が欲しいメッセージはありません。 – MB34

+4

なぜ、使用すべきではないクラスを公開していますか?あなたのユースケースを理解するのに役立つかもしれません。 –

答えて

0

クラスは、外部使用のために意図されていない場合は、マークすることができますクラスを内部として使用し、sdkのユーザーはそのクラスにアクセスできません。ユーザーがクラスのメソッドを見てはならない場合、私はそれらを非公開としてマークすることを検討します。

0

これを示す標準的な方法は、メソッドをNotImplementedExceptionにスローさせることです。残念ながら、これは、ランタイムでは、その機能が実装されていないことが分かります。

ただし、普及している拡張子ReSharperは、コンパイル時にNotImplementedExceptionを投げるメソッドを使用すると警告します。


あなたはビルド/デザイン時にできる最善のはObsoleteAttributeを使用しています。あなたはそれをカスタムメッセージを与え、マークメソッド/クラスのエラーを利用することができます:

[Obsolete("This method is not implemented!", true) 
public void MyFunc() 
{ 
    throw new NotImplementedException(); 
} 

これはエラーCS0619が発生します:'MyClass.MyFunc()' is obsolete: 'This method is not implemented!'

+0

私のポストのコメントで指摘したように、関数自体は両方のSDKで使用されていますが、1つのSDKでインスタンス化できないようにする特定のクラスです。私たちが好きなように内部アクセス修飾子が機能しました。 – MB34

関連する問題