.NET2008です。
CLIで、関数を追加するには、どうしたらいいのでしょうか。
たとえば、
int Hoge(int i)
というような、関数を追加したい場合です。
MFCの場合は、クラスビュー右クリックで、ポップアップメニューを開き、追加→関数の追加で、メンバ関数の追加ウイザードが開きますが、CLIの場合、同じようなウイザードは見当たらないようです。
よろしくお願いします。
エディタで直接打ち込めばいいやん。
.NET 2005 にはあるけどなぁ〜
いらないけど。
失礼 VC++ 2005 orz
.NET は消えたんだった
> MFCの場合は、クラスビュー右クリックで、ポップアップメニューを開き、
> 追加→関数の追加で、メンバ関数の追加ウイザードが開きますが、
> CLIの場合、同じようなウイザードは見当たらないようです。
Visual Studio 2008 Team System - Team Suite ではできますよ?
# 要らないけど
Visual Studio 2008 Team System - Team Suite
で検索すると、マイクロソフトのダウンロードセンターがひっかかります。
でも、初心者なので、現時点では、.NET2008のWindowsフォームアプリケーションの範囲内で、理解したいと思うのですが。
また、手書きをするとしても、返り値をどうするのでしょうか。
そもそも「要らない」という理由が分かりません。
特にメンバ関数など作らず、そのつど、シコシコッとコーディングするのでしょうか。
COMのライブラリやイベントなどを作るならともかく、
一般のメンバ関数を作るのにわざわざ追加ウイザードを
使わないということです。
そのつどシコシコッとコーディングします。
返り値は自分で決めるのでウィーザードで設定しても
書いてもとどのつまり同じことです。
イベントの話な気がしてきたので
こちらをどうぞ。
http://dobon.net/vb/dotnet/beginner/eventhandle.html
そださん、ありがとうこざいます。
たいへんお手数なのですが、たとえば、Form1.h で、MFCの
int CaaaView::Hoge(int a, int b)
{
return a+b;
}
に相当する関数を手書きする場合、コードはどのようになるのでしょうか。
ref class Form1 : Form {
....
int Hoge(int a, int b) { return a+b; }
...
};
なにがわからんのかさっぱりわからん...
>int CaaaView::Hoge(int a, int b)
>{
> return a+b;
>}
>に相当する関数を手書きする場合、コードはどのようになるのでしょうか。
そのまま書けばいいのでは・・・
もっともヘッダーに書くので上記のεπιστημηさんみたいな
書き方が妥当な気がしますが。
CLI以前にC++の問題な気がするな〜
イベントじゃないし、普通のメンバ関数だし
・・・orz
>また、手書きをするとしても、返り値をどうするのでしょうか。
このあたりの言葉からして
これまでは、基礎を知らないまま
VSの入力支援機能に頼ってただけなのでは?
VS2005のVC++・CLRにはあった
επιστημηさん、そださん、ありがとうございます。
要は、そのまま書けばいいんですね。
しかも、MFCなら別にヘッダファイルに宣言をする必要がありますが、それもいらない。
たいへん失礼いたしました。
> しかも、MFCなら別にヘッダファイルに宣言をする必要がありますが、それもいらない。
ちがうよう。コレがヘッダなんだってばぁ。
拡張子見てないのかなぁ
コントっぽくなってきた
επιστημη
すみません、手拍子で送信してしまいました。
> ちがうよう。コレがヘッダなんだってばぁ。
いえ、「そもそもヘッダファイルですね」とか、書こうと思ったのですが、突っ込まれそうな気がしたので、やめたのです。
でも、結局、突っ込まれました。
ただ、ヘッダファイルだとしても、改めて、宣言とか「ひな型」を書く必要はないんですね。
CLIは、省略できることが多く、なんだか拍子抜けします。
> ただ、ヘッダファイルだとしても、改めて、宣言とか「ひな型」を書く必要はないんですね。
ヘッダファイルは宣言でありひな型ですけど。
> CLIは、省略できることが多く、なんだか拍子抜けします。
なんか噛み合わんなぁ。
--- Form1.h
ref class Form1 : Form {
int Hoge(int a, int b) { return a+b; }
};
あるいは
--- Form1.h
ref class Form1 : Form {
int Hoge(int a, int b);
};
--- Form1.cpp
int Form1::Hoge(int a, int b) { return a+b; }
です。書式としてはC++と同じです。
> CLIは、省略できることが多く、なんだか拍子抜けします。
επιστημηさんも書かれてますが、
C++でもおんなじ様なことは出来ますよ。
どうもC++の方も理解が足りない部分が有りそうな気がしますね。
あと、言語的に言うならC++/CLIが正式な名称だったはず。
言語的には別物ですけれど、文法的には殆ど同じだったと。
C++/CLIで追加された部分以外は殆どC++と同じなんでは無いかなぁ。
あと、統合開発環境(IDE)は確かに便利ですけれど、
頼りすぎない方がいいです。
そうで無いとIDEの調子が悪いと何も出来なくなってしまいます。
IDEは空くまでも手間を省く為の物であって必要な手間を
理解しないで良いと言うわけでは有りません。
逆にフルスクラッチで欠けるくらいの知識を持ってこそ
IDEのよさも生かせると思います。
あうあう。誤字
誤)
IDEは空くまでも手間を省く為の物であって必要な手間を
正)
IDEはあくまでも手間を省く為の物であって必要な手間を
επιστημηさん、ありがとうございます。
Form1.h で
#pragma endregion
int Hoge(int a, int b) { return a+b; }
};
}
とすると、ビルドを通ります。
#pragma endregion
ref class Form1:Form {
int Hoge(int a, int b) { return a+b; }
};
};
}
とすると、
'Form1' : 入れ子になっているクラスは、それを囲んでいるクラスと同じ名前を指定することはできません
というエラーになります。
#pragma endregion
};
ref class Form1:Form {
int Hoge(int a, int b) { return a+b; }
};
}
や、
#pragma endregion
};
}
ref class Form1:Form {
int Hoge(int a, int b) { return a+b; }
};
としても、エラーになります。
手もとの参考書では、ref class は、「参照クラス型」としていますが、それ以上の説明はありません。
あなたは絶対に素のC++の基礎から勉強する方が良い
> 'Form1' : 入れ子になっているクラスは、それを囲んでいるクラスと同じ名前を指定することはできません
> というエラーになります。
当然そうなりますね。C++と同じです。
επιστημηさん、ありがとうございます。
単刀直入に、
ref class Form1:Form {
int Hoge(int a, int b) { return a+b; }
};
の置き場所はどこでしょうか。
ref class Form1:Form {
int Hoge(int a, int b) { return a+b; }
};
これをそのままどこかに置けるわけじゃありません。
Form1のメソッド int Hoge(int a, int b) の宣言部
は ref class Form1 : Form { ... }; のカッコ内、
実装部は Form1.cpp の Form1 が属するnamspace内に置きます。
# 宣言と同時に実装してもかまいません。
つまりC++と同じです。
επιστημηさん、ありがとうございます。
Form1.cpp を使わない場合、どうするのかなぁ、と、思ったのですが、要は、クラスを作ればいいのですね。
お世話になりました。
> 要は、クラスを作ればいいのですね。
たぶんわかってない。ヘッダ書いた時点でクラスはできてます。
既に指摘済ですが、C++でもやろうと思えば(まあ、あまりそんなこと思いませんが)
すべてヘッダで実装してしまえますし、C++/CLIでもヘッダと.cppファイルとに
分けて実装することもできます。
ヘッダと.cppを分けるか、ヘッダにすべて実装するかというのは、C++とC++/CLIの
違いではなく、Visual Studioのお行儀の問題。
http://www.atmarkit.co.jp/fdotnet/special/vcppinvista02/vcppinvista02_01.html
の、「●生成されたひな型コードの是非」参照。
# 本人を差し置いてリンク張っちゃいました。
ツイート | ![]() |