- ベストアンサー
.NET Frameworkのクラスのみで書いたプログラムをマネージアプリケーションと呼ぶのでしょうか?
- マネージアプリケーションとは、「.NET Framework」のクラスライブラリ郡群のみで構成されたプログラム、という解釈で合ってますでしょうか?
- 「Windows フォーム アプリケーション(.NET)」で作成したプロジェクトで、「System.String」のクラスを使用したところ、「System.String」はアンマネージです…といったエラーが頻発してしまい、この解釈が間違っているのかと思い、質問させて頂きたく思います。
- 「__gc」キーワード付きでclass宣言したところ、エラーは出なくなりました。アンマネージと__gcの関係などもあるのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>極端なことを言えば System::StringクラスをC++の(アンマネージド)クラス > として定義してもVCはエラーだとは認識しないと言うことです この部分は class System { public: System() { }; class String { public: String(){}; }; }; といった 独自のアンマネージクラスを定義してもエラーにならない と言いたかったわけです C++の文法的は正しいわけです … しかし .NET FreameWorkの System::Stringと重複するのでソースの可読性は大変悪くなりますけどね
その他の回答 (1)
- redfox63
- ベストアンサー率71% (1325/1856)
C++キーワード classとマネージ型のクラスを区別するために __gcが導入されたのだと思います VC++.NETは マネージコード、アンマネージコードの混在オブジェクトの作成が可能なのでどれがマネージ環境なのかを区別する必要があります 極端なことを言えば System::StringクラスをC++の(アンマネージド)クラスとして定義してもVCはエラーだとは認識しないと言うことです
お礼
ご回答ありがとうございます! 明示的に__gc宣言しないと.NETの文法的によくない、ということですね。 >極端なことを言えば System::StringクラスをC++の(アンマネージド)クラスとして定義してもVCはエラーだとは認識しないと言うことです すみません、ここが分かりませんでした。 アンマネージで定義すると、マネージとアンマネージのチェック機能が働かなくなるから、System::Stringをgcrootキャストなくても動くようになった・・・という解釈であってますでしょうか? System::Stringは.NETのクラスですよね? エラーを見た限り、System::Stringがアンマネージのような書き方がされていて、不思議に思った次第です。
お礼
再度ご回答いただき、ありがとうございました! 多重定義・・・みたいなことができるということですね。 どうもまだ知識不足なので、C++のクラスについて勉強しなおしてきます。