R.Tanaka.Ichiro's Blog

主にC# な話題です

目次

Blog 利用状況

ニュース

部分型定義(その3)

http://blogs.wankuma.com/rti/archive/2007/04/04/70109.aspx
部分型定義

http://blogs.wankuma.com/rti/archive/2007/04/05/70261.aspx
部分型定義(その2)

の続きです。

partial class は、複数のファイルに、ひとつのクラスを分けて記述できますが、ひとつのファイルに記述することもできます。
以下は、メンバもコンストラクタももたない空のクラスをテストとして C# で記述してみました。


「ファイル名:Test.cs」

 public partial class Test {}

 partial class Test {}

 partial class Test {}


ところで、partial と記述されていた時点で、どのファイルにクラスメンバの断片が記述されているかを特定することはできないため、クラスの全容を把握することが困難です。
(詳細は、上記リンクにある部分型定義の επιστημη さんのコメントを参照して下さい)

ですから、利用する際の規則を定めて用いることが重要だと思います。

僕としては、今後 partial class を用いる場合、上記のように、同じファイルに記述しようと思います。
なお、今まで作成した partial class の全体を把握するには、

クラスビュー

が参考になるかと思います。

メニュー「表示」→「クラスビュー」

投稿日時 : 2007年4月11日 11:49

Feedback

# re: 部分型定義(その3) 2007/04/11 13:22 シャノン

> 僕としては、今後 partial class を用いる場合、上記のように、同じファイルに記述しようと思います。

…メリットあるん?

# re: 部分型定義(その3) 2007/04/11 13:51 R・田中一郎

シャノン さん

>…メリットあるん?

正直なところ、デザイナが勝手に作るものを除くと、実は 1 回しか用いたことがないんですよね。
なので、メリット・デメリットについては、これから実際に使ってみて・・・ということになるかと思います。

# re: 部分型定義(その3) 2007/04/11 18:35 ghost_shell

>> 僕としては、今後 partial class を用いる場合、上記のように、同じファイルに記述しようと思います。

>…メリットあるん?

同感。

>ところで、partial と記述されていた時点で、どのファイルにクラスメンバの断片が記述されているかを特定することはできないという問題があるようです。

「問題がある」?? (ただ単にニュアンスの取り方の違いだと思うが、気にかかった)
インテリセンスにそこまでの対応を求めませんよ、私は。

それに「partialと記述すること」のように全部に書く必要のあることや、1箇所のみに記述しないといけないことといった書き方の決まりがあるけど、コンパイラの作業や解釈の一意性などを考えれば、概ね納得がいきます。


確かにpartialを使うと全体把握が難しい。デザイナの例を参考にして、クラス内で機能や役割を委譲するときが活用できる場面だと思います。


※最後の行はオブジェクト指向的に誤った表現が使われています。

# re: 部分型定義(その3) 2007/04/11 19:55 じゃんぬねっと

Partial クラス使わないじゃんぬですが、何か質問ある?

# re: 部分型定義(その3) 2007/04/11 22:57 Hirotow

> Partial クラス使わないじゃんぬですが、何か質問ある?
Windows.Formsをお使いでないのですか?

冗談はさておき、
個人的にはデザイナとかASP.NET以外で使う必要性をあまり感じません。
「同一ファイルに記述」ならなおさらです(てか無意味。

まあ複数人で同じクラスを開発する場合なら多少使えるかもしれませんが、CVSからGrooveまで多種多様なバージョン管理/プロジェクト管理システムが存在している以上かえって混乱の元になるだけでしょう。
また、VSにユーザー定義の「xxx.yyy.cs」といったファイル名のファイルを「xxx.cs」を親として[aaa.designer.cs]みたくフォルダとして表示してくれる機能がないことにも落胆です。

# re: 部分型定義(その3) 2007/04/12 0:54 シャノン

> また、VSにユーザー定義の「xxx.yyy.cs」といったファイル名のファイルを「xxx.cs」を親として[aaa.designer.cs]みたくフォルダとして表示してくれる機能がないことにも落胆です。

プロジェクトファイルを手作業でごにょごにょすれば可能だった気がする。

# re: 部分型定義(その3) 2007/04/12 11:11 R・田中一郎

ghost_shell さん

>同感。

実際、僕もまだ試している最中ですが、メンバのグループ分けにどうかなぁ、なんて思っています。
まあ、これも考え方がいろいろ別れるところではあるのでしょうけれど。

>「問題がある」?? (ただ単にニュアンスの取り方の違いだと思うが、気にかかった)

そうですね。問題があるという表現は不適切かもしれません。修正しておきます。

>いけないことといった書き方の決まりがあるけど、コンパイラの作業や解釈の一意性などを考えれば、概ね納得がいきます。

そうですね。

>確かにpartialを使うと全体把握が難しい。デザイナの例を参考にして、クラス内で機能や役割

「恐らく」ですが、デザイナのために設けられた機能なのでしょうね。

------------------------------------------------------------
じゃんぬねっと さん

>Partial クラス使わないじゃんぬですが、何か質問ある?

使わない理由は、クラスの全容がつかみにくくなる他に何かありますか?
------------------------------------------------------------
Hirotow さん

>「同一ファイルに記述」ならなおさらです(てか無意味。

まあ、そうでしょうね。
異なるファイルで管理できるのが、メリットな訳でしょうから。

>まあ複数人で同じクラスを開発する場合なら多少使えるかもしれませんが、CVSからGrooveまで多種多様なバージョン管理/プロジェクト管理システムが存在している以上かえって混乱の元になるだけでしょう。

名前空間に属するクラスは、複数のファイルに分割して管理していますよね。
これと同じ理由で、メンバを複数のファイルに分割して管理したくなるケースが存在するかどうかとういうことかもしれませんね。

------------------------------------------------------------
シャノン さん

>プロジェクトファイルを手作業でごにょごにょすれば可能だった気がする。

しかし、プロジェクトファイルを手作業でごにょごにょするのは怖いなぁ。

# バーバリー バッグ 2012/11/06 19:46 http://burberry.suppa.jp/

こんにちは、またブログ覗かせていただきました。また、遊びに来ま~す。よろしくお願いします

タイトル
名前
Url
コメント