4

C#クラスを、クラス定義を含むヘッダーと、実装を含む実際の.csファイルに分割する方法はありますか?インターフェイスを作成することでこれを実行できると思いますが、それは正しくないようです。すべての詳細ではなく、クラスの設計だけを表示できるファイルが必要です。C ++で行うのは簡単ですが、C#で行うのは見たことがありません。

前もって感謝します。

4

16 に答える 16

24

それは間違ったアプローチです。C#はC++ではありません。ヘッダーファイルを忘れてください

クラスの概要が必要な場合は、 VisualStudioでオブジェクトブラウザーを開くだけです。クラス内のすべてのメソッドのシグネチャが提供されます。

于 2008-09-21T20:30:08.467 に答える
16

部分クラスと部分メソッドを使用できます。なぜあなたがこれをするのか分かりませんが...

部分的なクラスとメソッド-MSDN

于 2008-09-21T20:29:41.700 に答える
10

同じファイルで、Visual Studioのアウトライン関数を使用してクラスを折りたたみ、メソッドとプロパティの名前のみが表示されるようにすることができます。

Visual Studioを使用して、クラスのさまざまなメソッドとプロパティの名前を示すクラスビューを表示することもできます。

dotnetには、実装とは別の場所でクラスを定義する必要がある理由はほとんどありません。

于 2008-09-21T20:29:00.343 に答える
2

C#でこれを実行する方法(または本当の理由)はありません。VS.NETを使用して、クラスを要約することができます([表示]メニューですべて折りたたむ)。または、本当に必要な場合は、インターフェイスを使用できます。あなたが尋ねる理由は何ですか?

于 2008-09-21T20:28:25.413 に答える
1

interface同じ意図を達成するためにを使用することができます。

IFoo.cs:

public interface IFoo
{
  int DoFoo();
}

Foo.cs:

public class Foo : IFoo
{
  public int DoFoo()
  {
    return 1;
  }
}
于 2008-09-21T21:25:45.543 に答える
1

C++のようにヘッダーファイルを作成できるとは思いません。クラスとメソッドの両方の部分的なキーワードを確認してください。昨日知ったばかりなので、あまり使っていませんが、やろうとしていることを成し遂げるのに役立つかもしれません。

于 2008-09-21T20:30:17.703 に答える
1

これは C++ のみの機能でした。これは、古いコンパイラが正しく機能するために関数シグネチャの前方宣言を必要としたためです。

ただし、これが便利で、複数回必要な場合は、リフレクションを使用して任意のコンポーネントからパブリック インターフェイスを抽出し、任意のレイアウトでテキスト ファイルにフォーマットする小さなユーティリティを作成してみてください。欲しかった。

別の方法として、 /// 構文を使用してクラスの XML ドキュメントを作成することもできます。

于 2008-09-22T08:14:10.617 に答える
1

プライベート メソッドに関心がある場合、インターフェイスを抽出することは適切な計画ではありません。抽象クラスを使用するということは、「ビュー」要件をサポートするために、アプリケーションの設計を大幅に変更することを意味します (そして、不必要に複雑さを増していると思います)。部分クラスでは、完全な公開署名と非公開署名が 1 か所に表示されないため、これも理想的ではありません。

したがって、IDE を持っていない場合、または使用したくない場合は、Reflector のデフォルトの逆アセンブル アクションを使用します (無料で、いずれにせよ素晴らしいおもちゃです)。

http://www.red-gate.com/products/reflector/index.htm

例えば。System.Web.Caching.Cache

public sealed class Cache : IEnumerable
{
    // Fields
    private CacheInternal _cacheInternal;
    public static readonly DateTime NoAbsoluteExpiration;
    public static readonly TimeSpan NoSlidingExpiration;

    // Methods
    static Cache();
    [SecurityPermission(SecurityAction.Demand, Unrestricted=true)]
    public Cache();
    internal Cache(int dummy);
    public object Add(string key, object value, CacheDependency dependencies, DateTime absoluteExpiration, TimeSpan slidingExpiration, CacheItemPriority priority, CacheItemRemovedCallback onRemoveCallback);
    public object Get(string key);
    internal object Get(string key, CacheGetOptions getOptions);
    public IDictionaryEnumerator GetEnumerator();
    public void Insert(string key, object value);
    public void Insert(string key, object value, CacheDependency dependencies);
    public void Insert(string key, object value, CacheDependency dependencies, DateTime absoluteExpiration, TimeSpan slidingExpiration);
    public void Insert(string key, object value, CacheDependency dependencies, DateTime absoluteExpiration, TimeSpan slidingExpiration, CacheItemPriority priority, CacheItemRemovedCallback onRemoveCallback);
    public object Remove(string key);
    internal void SetCacheInternal(CacheInternal cacheInternal);
    IEnumerator IEnumerable.GetEnumerator();

    // Properties
    public int Count { get; }
    public long EffectivePercentagePhysicalMemoryLimit { get; }
    public long EffectivePrivateBytesLimit { get; }
    public object this[string key] { get; set; }
}
于 2008-09-22T04:16:46.990 に答える
0

これはIDEの目的ではありませんか?

編集:それ以外の場合は、推論と抽象クラスが進むべき道です。

于 2008-09-21T20:27:20.957 に答える
0

クラスビューをお試しください。各クラスをクリックすると、メンバーが一覧表示されます。

于 2008-09-21T20:28:59.720 に答える
0

インスタンスの後に「。」が続く場合、IDEはそのインラインを正確に表示します。お気に入り

myBadlyNamedObject。

(または「ClassName。」)、そしてその美しさは、オブジェクト定義を開いてオブジェクトが何であるかを確認するときではなく、オブジェクトを操作するときに指先で操作できることです。

于 2008-09-21T20:29:48.517 に答える
0

私の知る限り、それは不可能です。ただし、クラスのさまざまな部分をさまざまなファイルに配置する部分クラスを使用すると、状況を少し改善できます。たとえば、すべてのパブリックメソッドを1つのファイルに入れ、すべてのプライベートメソッドを1つのファイルに入れて、他のオブジェクトから使用できるメソッドの概要を簡単に把握できるようにすることができます。

于 2008-09-21T20:31:09.307 に答える
0

本当にこれを行う必要がある場合、最も近いオプションは Refactor --> Extract interface です。

于 2008-09-22T02:42:44.407 に答える
0

「USE THE IDE~!~~」と言っている皆さん、的外れです。コードは常に IDE で読み取られるわけではありません。多分彼はそれを印刷したいのですか?それともメール?これが、言語機能を実装しないことの問題です。なぜなら、IDE で実行できるからです。IDE では、コードが常に読み取られる (または書き込まれる) とは限りません。

つまり、部分クラスとメソッドを使用してそれを行うことができます。ただし、両方のファイルにインスタンス変数を含めることはできないと思います。

于 2008-09-22T02:47:31.867 に答える
0

WinCV は、.net アセンブリのヘッダー ビューに似た C++ を提供する .net 1.0 フレームワーク SDK ユーティリティです。.net 2.0 用に構成する方法については、google で wincv.exe を検索してください。

于 2009-05-03T17:07:32.763 に答える
0

いつでも部分クラスを使用できます

于 2010-07-31T11:19:10.017 に答える