只今、C# 2005 Beta1で勉強中です。
今回お聞きしたいのは共通で使用する関数を作成する時にクラスを意識することなく作成する
方法です。
例えばエラー処理をするErrLogMsgという関数をクラスA, B, Cから共通で呼び出したい場合、
ErrLogMsgをそれぞれのクラス内に書いてしまうとメンテ時の効率が下がってしまうので共通
領域に記述しておきたいのですが、クラスDを作ってその中に記述すると確かに共通化はでき
るのですが、関数を呼び出すときにクラスDの変数を用意(仮にD_Dush)してD_Dush.ErrLogMsg
として呼び出すようになってしまいます。
使用者側にクラスを意識させること無く呼び出せるようにしたいのですがどのようにすればよ
いのでしょうか。それともそのような方法はないのでしょうか。
もしかして、静的メソッドのことをおっしゃているのでしょうか?
ぐぐってみたページを載せておきます。
http://www-ise2.ise.eng.osaka-
u.ac.jp/~iwanaga/programming/csharp/oo_static.html
返信ありがとうございます。
> もしかして、静的メソッドのことをおっしゃているのでしょうか?
>
多分、違うと思います。
参考ページを見させていただきましたが、静的メソッドで作成するとクラス名.関数名()と言
う形で呼び出さなければいけないと思います。そうではなく関数名()だけで呼び出すようにで
きないでしょうか。
イメージ的にはAPIみたいなものを考えてました。(VCやVB等で使用するときに○○.DLLに
○○関数が含まれているのでそれを呼び出せば機能が使用できる。その時にどのクラスに所属
しているかの概念は必要ないみたいなものです。)
↑うまく伝わるかな?
PS.
C#では共通関数はStatic定義したクラスに作成するのが普通なのでしょうか。
一番始めの投稿前はpartialの意味が良くわかっていなかったので共通関数が増え、多数ファ
イルに分割すると共通関数を管理するクラスが増えてしまい、使いにくいのかと思っていまし
た。
>そうではなく関数名()だけで呼び出すようにできないでしょうか。
Cでいうとグローバル関数みたいなものでしょうか?
MSDNに
C# のクラスのメソッドには、クラスとして実行されるコードが含まれます。C# ではス
タンドアロン関数やグローバル関数がサポートされないため、C# のすべてのメソッドは
クラスメンバとして存在します。メソッドは常に、クラス宣言の一部として宣言されま
す。
とありますけどどうなんでしょうか?
http://www.microsoft.com/japan/msdn/library/default.asp?
url=/japan/msdn/library/ja/jpdnprogvcsharp/htm/chapter2.asp
>>そうではなく関数名()だけで呼び出すようにできないでしょうか。
>Cでいうとグローバル関数みたいなものでしょうか?
>
そうです。グローバルなものをイメージしておりました。
>MSDN
>
大変参考になりました。
やはり関数はクラス外には作成できないんですね。(泣
本疑問を持った根底部分もpartialを使うことで解決するみたいですし。
お付き合いいただきありがとうございました。