C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

.csを分割したい

[トピック内 11 記事 (1 - 11 表示)]  << 0 >>

■96485 / inTopicNo.1)  .csを分割したい
  
□投稿者/ から好し (15回)-(2020/12/01(Tue) 16:25:38)
から好し さんの Web サイト

分類:[C#] 

開発環境 VS2019
使用言語 C#Windowsフォーム


1つの.csファイルに長々とコードを書きすぎてしまったので
分割しようとしています。

BASE.cs もともとあるファイル
namespace base_a
{
}

DIVISION.cs 分割したファイル
namaespace division_a
{
}

BASE.csで、分割したファイルdivision_aを使用したいので
BASE.csのusingに、
using division_aとしたところ、名前空間が見つからないというエラーが出ました。

「名前空間 見つからない C#」や「using 名前空間 見つからない C#」などで検索して
試してみましたが、解決には至っておりません。

どうしたらよいかご存じの方がいらっしゃいましたら
ご教示ください。





引用返信 編集キー/
■96488 / inTopicNo.2)  Re[1]: .csを分割したい
□投稿者/ 魔界の仮面弁士 (2931回)-(2020/12/01(Tue) 17:15:04)
2020/12/01(Tue) 17:15:34 編集(投稿者)

No96485 (から好し さん) に返信
> 1つの.csファイルに長々とコードを書きすぎてしまったので
> 分割しようとしています。

一つの class を複数のファイルに分離するだけならば、
partial class を使えます。

別のクラスにしたり、別の名前空間にするのであれば、
partial 化する必要は無いですけれどね。


> BASE.cs もともとあるファイル
> namespace base_a

> DIVISION.cs 分割したファイル
> namaespace division_a

名前空間の命名規約を貼っておきます。
https://docs.microsoft.com/en-us/dotnet/standard/design-guidelines/names-of-namespaces
https://docs.microsoft.com/ja-jp/dotnet/standard/design-guidelines/names-of-namespaces


> BASE.csで、分割したファイルdivision_aを使用したいので
> BASE.csのusingに、
> using division_aとしたところ、名前空間が見つからないというエラーが出ました。

プロジェクトと無関係のファイルを開いているということは無いでしょうか。

ソリューション エクスプローラーで、現在のプロジェクトの配下に
BASE.cs と DIVISION.cs が配置されているか確認してみてください。
引用返信 編集キー/
■96489 / inTopicNo.3)  Re[2]: .csを分割したい
□投稿者/ 紅 (6回)-(2020/12/01(Tue) 17:51:25)
個人的にパーシャルクラスの利用は、あまりおすすめできないです。
たとえばWinFormだと画面の表示部分と、中身の部分でわけていますよね。
明確な理由があって利用するならいいのですが――
コードが長くなったからわけるぐらいなら、そのままのクラスの方がわかりやす
く利用しやすいと思います。
どうしても分けたい場合は、他の案もあります。
たとえば機能で分割を検討(パーシャルクラスではなくクラスでわけるだけ)、
継承を利用してコード量を減らすとか考えられます。
前者はわけた方が利用しやすくなるならOK、後者の継承は下手に利用すると第三
者が理解しにくい、時間がたつと自分もわかりにくいコードになります。
引用返信 編集キー/
■96490 / inTopicNo.4)  Re[1]: .csを分割したい
□投稿者/ furu (97回)-(2020/12/01(Tue) 18:38:38)
No96485 (から好し さん) に返信
> DIVISION.cs 分割したファイル
> namaespace division_a
>
> using division_aとしたところ、名前空間が見つからないというエラーが出ました。

namespace(ネームスペース)をnamaespace(名前スペース)と
スペルミスしたから?
引用返信 編集キー/
■96491 / inTopicNo.5)  Re[2]: .csを分割したい
□投稿者/ ぶなっぷ (262回)-(2020/12/02(Wed) 09:27:40)
から好し さんの直接の疑問は他の人が答えてくれるでしょうから、
私の方は、「よい設計」という観点から話したいと思います。

以下のようになる原因というのは、
> 1つの.csファイルに長々とコードを書きすぎてしまったので
私の経験では、何でもかんでもクラスを作ってしまったことに起因することが多いです。

では、なぜ、何でもかんでもクラスができてしまうのか?
ありがちなのが、画面クラスに何でもかんでも書いてしまうことです。

例えば、Windowsの電卓のようなソフトウェア。
起動時に表示されるメイン画面が1枚あるだけです。
このようなソフトウェアにおいて、「画面クラスに何でもかんでも書く」をすればどう
なるでしょう?
そうですね、ファイルはたった1つにしかなりません。

そこで。。。
(Windows10の)電卓をよく見ると、標準/関数電卓/...など様々なモードがあります。
これらを、たった一つのクラスで扱うのはどうか?という話があります。

標準/関数電卓などは、機能に差がある(πやlogボタンなど)だけで、基本、計算をする
という意味(+-*/=など)においては差がありません。

なので、計算の標準機能をベースクラスにして、
派生クラスで標準電卓/関数電卓/...などを作れば、
  class CalculatorBase;
  class NormalCalculator : CalculatorBase;
  class ScientificCalculator : CalculatorBase;
   :
これだけでクラス(= ファイル)は自然にたくさんに分かれます。
機能ごとのクラス(= ファイル)に分かれたことによって、ソースコードも読みやすく、
設計変更もしやすくなります。

クラス分割は、上記のような機能分割だけではなく、データ分割等によっても好ましく
行うことができます。
例えば、社員管理ソフトウェアのようなものを考えます。
社員管理ソフトウェアのデータをDataBaseで管理しようと思えば、以下のような
テーブルが含まれていても自然でしょう(^^)
  ・社員情報 (社員番号/氏名/生年月日/性別/住所/...)
  ・組織情報 (部課番号/部課名/職務/親部課番号/...)
  ・所属情報 (社員番号/部課番号/業務内容/...)
      :
データベースにしたときに、テーブルが分かれそうなものは、C#のクラス化の際もクラス
分けするのが基本的な考え方です(そうとばかりも限りませんが、そういうことが多いと
いう意味)。

長くなりましたが。。。
ただ、「長すぎるからファイル分割」では、逆にソースコードは読みづらくなる可能性
が高いです。
設計レベルでのクラス分割の結果として、ファイル分割が当たり前に自然に起きる。
これが「よい設計」だと思うのです。

引用返信 編集キー/
■96508 / inTopicNo.6)  Re[3]: .csを分割したい
□投稿者/ から好し (16回)-(2020/12/04(Fri) 07:34:39)
から好し さんの Web サイト
No96491 (ぶなっぷ さん) に返信

とても分かりやすい説明を有難うございます。
周囲に聞ける人が居ないので、とても助かりました_(._.)_
もともと長くなったから短く纏めようと思ったのも、後でその方が読みやすいのではないかと思ったからです。
クラスの設計から考えないといけないのではないかと漠然と思っていましたが
ぶなっぷ様のおかげで、よい設計と言うのが分かりました。

引用返信 編集キー/
■96509 / inTopicNo.7)  Re[4]: .csを分割したい
□投稿者/ から好し (17回)-(2020/12/04(Fri) 07:41:30)
から好し さんの Web サイト

コメントをくださった皆様、有難うございます。

引用返信 編集キー/
■96510 / inTopicNo.8)  Re[5]: .csを分割したい
□投稿者/ から好し (18回)-(2020/12/04(Fri) 10:30:33)
から好し さんの Web サイト
No96509 (から好し さん) に返信

ファイルの分割を進めていくうえで分割したファイルからForm1にあるコントロールにアクセスしようと、コントロールのModifiersをpublicに変更し、
Form form =new Form
form.コントロール名としてもusingディレクティブまたはアセンブリ情報が不足していないかというエラーが出ました。
どうしたらいいかご存知でしたら、教えて頂けると助かります。
引用返信 編集キー/
■96512 / inTopicNo.9)  Re[6]: .csを分割したい
□投稿者/ furu (98回)-(2020/12/04(Fri) 12:31:26)
No96510 (から好し さん) に返信
> ■No96509 (から好し さん) に返信
> form.コントロール名としてもusingディレクティブまたはアセンブリ情報が不足していないかというエラーが出ました。
> どうしたらいいかご存知でしたら、教えて頂けると助かります。
もうちょっと状況教えてもらわないとわかりません。

・エラーになったコードは?

・分割したファイルにForm1はどう渡した?
引用返信 編集キー/
■96513 / inTopicNo.10)  Re[7]: .csを分割したい
□投稿者/ 774RR (847回)-(2020/12/04(Fri) 14:28:10)
っていうか new Form() してできたブツは既に画面上にある Form とは別の「新しい」代物なので
new Form() が本当にしたいことなのかは要検討
引用返信 編集キー/
■96533 / inTopicNo.11)  Re[8]: .csを分割したい
□投稿者/ から好し (20回)-(2020/12/09(Wed) 11:05:28)
から好し さんの Web サイト
別の方法ですることになりました。

コメントを頂いた皆様、誠にありがとうございました。
解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ