12

このIHideObjectMembersトリック(別名IFluentInterface)は、たとえば流暢なインターフェイス実装で、System.ObjectメンバーをIntelliSenseから隠すために使用できます。(このトリックがわからない場合は、上記のリンクから確認できます。ここでは、インターフェイスの通常の宣言を繰り返しています:)

using System;
using System.ComponentModel;

[EditorBrowsable(EditorBrowsableState.Never)]
public interface IHideObjectMembers
{
    [EditorBrowsable(EditorBrowsableState.Never)] bool Equals(object obj);
    [EditorBrowsable(EditorBrowsableState.Never)] int GetHashCode();
    [EditorBrowsable(EditorBrowsableState.Never)] Type GetType();
    [EditorBrowsable(EditorBrowsableState.Never)] string ToString();
}

System.Objectこれで、次のように別のタイプのメンバーを非表示にできるはずです。

public class SomeClass : IHideObjectMembers { ... }

また:

public interface ISomeInterface : IHideObjectMembers { ... }

VS2008ExpressとVS2008Standardの両方でこれを試しました。ただし、IntelliSenseから隠されているメンバーはありません。私はEditorBrowsableAttributeさまざまなプロジェクトでを使用しましたが、常にうまく機能しました。ただし、この特定のシナリオでは機能しません。

物事が期待通りに機能していたら、私はそのSomeMethodTwo方法を見ただけだったでしょう。

私は何かが足りないのですか?


PS:宣言とスクリーンショットから私のサンプルコードを推測できます。SomeClassと呼ばれる単一のダミーメソッドを持つクラスがありSomeMethodTwoます。とてもシンプルです。このクラスの4つのメソッドは必要ないはずなので、再実装していません。System.Object

4

3 に答える 3

12

実用的なソリューションが投稿される前に(上記を参照)、私は少し調査して実験し、これを見つけました:

  • EditorBrowsableStateIntelliSenseは、等しいAdvancedまたは。でマークされたプロパティを無視するように指示する必要がありますNever。これは、Visual Studioで、メニュー項目[ツール] → [オプション... ] → [テキストエディター] → [ C# ] → [ IntelliSense ] → [高度なメンバーを非表示]を介して実現されます。

  • このIHideObjectMembersトリックは、「他の」アセンブリからのみ機能し、使用するプロジェクトがIHideObjectMembers同じソリューションにロードされていない場合にのみ機能します。

  • の非静的メンバーの非表示は、インターフェイスobjectを介して実行した場合は機能しない場合がありIHideObjectMembersますが、メソッドがクラスで直接オーバーライドされている場合は機能します...残念ながら、表示されている非表示の手法はあまり役に立ちません。

これらの手がかりのソース:

于 2010-08-24T21:15:27.877 に答える
7

使用しない場合、トリックは機能します

var x = new SomeClass();

ただし、から継承するインターフェイスを明示的に使用しますIHideObjectMembers

ISomeInterface x = new SomeClass();

var具象クラスのタイプを取ります。したがって、IntelliSenseは検索しますが、検索しobject.ToString()ませんIHideObjectMembers.ToString()。前者は装飾されていませんが、後者は装飾されていEditorBrowsableAttributeます。

ダニエル・カズリーノは、彼の投稿でインターフェースを明示的に参照しています

流暢なAPIのすべてのインターフェースでこれを実行しました

于 2012-02-17T15:50:53.190 に答える
4

このトリックは、参照されるDLLに含まれている型を使用している場合にのみ機能します。これらの参照されるアセンブリは、VisualStudioプロジェクト参照にすることはできません。DLL自体を参照する場合、そのトリックはうまくいくはずです。

于 2011-04-23T02:24:54.920 に答える