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

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

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

Re[6]: public変数について


(過去ログ 13 を表示中)

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

■4015 / inTopicNo.1)  public変数について
  
□投稿者/ 島耕作 (1回)-(2007/06/01(Fri) 00:25:41)

分類:[C# (Windows)] 

2007/06/01(Fri) 00:36:03 編集(投稿者)

プラットフォーム;Windows Xp
開発環境:VS2007

はじめまして。C#初心者です。

フォームAでpublic変数を定義し、
それをclassB内で利用したいのですがどうすればよろしいのでしょうか?
引数として利用するのではなく、あくまでpublic変数として使用したいです。
ご教授お願いします。

・フォ−ム
public patial class A : Form
{
public string BtKbn = 0; // ここで宣言

public touroku_bottan_click(object sender, EventArgs e)
{

BtKbn = "1"; // ここで1を代入。
SqlCommon sqlcom = new SqlCommon();
sqlcom.DataRead();
}
}

・class
public class SqlCommon
{
public void DataRead()
{
if (Btkbn == "1") // ここで使用したいが、変数もpublicにならないため、エラーになります。
{
処理@
}
else
{
処理A
}
}
}
引用返信 編集キー/
■4016 / inTopicNo.2)  Re[1]: public変数について
□投稿者/ επιστημη (531回)-(2007/06/01(Fri) 00:36:53)
επιστημη さんの Web サイト
2007/06/01(Fri) 00:38:33 編集(投稿者)
public patial class A : Form {
  public static string BtKbn = "0"; // 'static'がキモ
  ...
}

public class SqlCommon {
  public void DataRead {
    if ( A.Btkbn == "1") { // 'A.'がキモ 
    ...
}

引用返信 編集キー/
■4019 / inTopicNo.3)  Re[2]: public変数について
□投稿者/ HiJun (34回)-(2007/06/01(Fri) 09:35:53)
老婆心ではありますが...

島耕作さんのソースをみて気になったんですが、
呼び元(FORM)の変数をインスタンス生成したクラスから
直接見に行くのはよろしくないかと...

せめて、SqlCommonクラスにプロパティを作るか、引数付きの
コンストラクタでBtKbnの値を渡すようにしたほうが良いかと
思いますよ。

引用返信 編集キー/
■4022 / inTopicNo.4)  Re[3]: public変数について
□投稿者/ επιστημη (532回)-(2007/06/01(Fri) 11:43:53)
επιστημη さんの Web サイト
> せめて、SqlCommonクラスにプロパティを作るか、引数付きの
> コンストラクタでBtKbnの値を渡すようにしたほうが良いかと
> 思いますよ。

御意。

あるいは void SqlCommand.DataRead() を呼びだすのが Form-A なのであれば、
DataRead(string kbn) みたいに引数で与えるのが吉と考えますけども。


引用返信 編集キー/
■4037 / inTopicNo.5)  Re[4]: public変数について
□投稿者/ 島耕作 (2回)-(2007/06/01(Fri) 23:27:54)
2007/06/01(Fri) 23:28:21 編集(投稿者)

επιστημη様、HiJun様ありがとうございました。

static宣言する事により、public変数になりました。
ところで、HiJun様からクラス側からFormのpublic変数を見るのは、
セオリー通りになってないとのご指摘を受けましたが、デメリットをお教えください。
セキュリティ的な側面からでしょうか?

また、引数を使用しないのは、クラスからクラスを呼んでいるため、階層が深くなっております。
そのため、引数は使用しておりません。
引用返信 編集キー/
■4038 / inTopicNo.6)  Re[5]: public変数について
□投稿者/ επιστημη (533回)-(2007/06/02(Sat) 00:03:31)
επιστημη さんの Web サイト
> ところで、HiJun様からクラス側からFormのpublic変数を見るのは、
> セオリー通りになってないとのご指摘を受けましたが、デメリットをお教えください。

クラスの結合が強すぎるのです。
「結合は弱く/凝集は強く」がセオリー。

引用返信 編集キー/
■4039 / inTopicNo.7)  Re[5]: public変数について
□投稿者/ よねKEN (42回)-(2007/06/02(Sat) 00:12:14)
よねKEN さんの Web サイト
> static宣言する事により、public変数になりました。
> ところで、HiJun様からクラス側からFormのpublic変数を見るのは、
> セオリー通りになってないとのご指摘を受けましたが、デメリットをお教えください。
> セキュリティ的な側面からでしょうか?

一般的な設計/プログラミングのセオリーです。

SqlCommonクラスはAクラスのためだけのための専用のクラスでしょうか?
#そうだとするとCommonというネーミングがよくないですね
SqlCommonというネーミングには、SQLに関する役割を担うという意味を込めていると思います。

このクラスは、作り方次第で汎用的な物になり得ますが、
島耕作さんの案では、Aクラスの属性であるBtKbnをSqlCommonから参照するので、
SqlCommonクラスはAクラスに依存します。
他のクラスからもSqlCommonを利用したいとなったときにこれでは支障があります。
この辺がデメリットです。
#ソースコードを見る限り、SqlCommonという名前に反して実際には、
#Aクラスに関するSQL関連処理だけを担うクラスのようですが

機能と機能の間の関連はなるべく少なくなるように設計するのがコツです。
「モジュール 結合度」で検索してみてください。

引用返信 編集キー/
■4040 / inTopicNo.8)  Re[6]: public変数について
□投稿者/ 島耕作 (3回)-(2007/06/02(Sat) 06:45:53)
επιστημη様、よねKEN様ご指摘ありがとうございました。

まだまだ、勉強不足です。
本やネットを利用してさらなる理解を深めたいと思います。

解決済み
引用返信 編集キー/


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

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -