• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:.NET Frameworkのクラスのみで書いたプログラムをマネージアプリケーションと呼ぶのでしょうか?)

.NET Frameworkのクラスのみで書いたプログラムをマネージアプリケーションと呼ぶのでしょうか?

このQ&Aのポイント
  • マネージアプリケーションとは、「.NET Framework」のクラスライブラリ郡群のみで構成されたプログラム、という解釈で合ってますでしょうか?
  • 「Windows フォーム アプリケーション(.NET)」で作成したプロジェクトで、「System.String」のクラスを使用したところ、「System.String」はアンマネージです…といったエラーが頻発してしまい、この解釈が間違っているのかと思い、質問させて頂きたく思います。
  • 「__gc」キーワード付きでclass宣言したところ、エラーは出なくなりました。アンマネージと__gcの関係などもあるのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

>極端なことを言えば System::StringクラスをC++の(アンマネージド)クラス > として定義してもVCはエラーだとは認識しないと言うことです この部分は class System {   public:   System() { };   class String {     public:     String(){};   }; }; といった 独自のアンマネージクラスを定義してもエラーにならない と言いたかったわけです C++の文法的は正しいわけです … しかし .NET FreameWorkの System::Stringと重複するのでソースの可読性は大変悪くなりますけどね

noname#102343
質問者

お礼

再度ご回答いただき、ありがとうございました! 多重定義・・・みたいなことができるということですね。 どうもまだ知識不足なので、C++のクラスについて勉強しなおしてきます。

その他の回答 (1)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

C++キーワード classとマネージ型のクラスを区別するために __gcが導入されたのだと思います VC++.NETは マネージコード、アンマネージコードの混在オブジェクトの作成が可能なのでどれがマネージ環境なのかを区別する必要があります 極端なことを言えば System::StringクラスをC++の(アンマネージド)クラスとして定義してもVCはエラーだとは認識しないと言うことです

noname#102343
質問者

お礼

ご回答ありがとうございます! 明示的に__gc宣言しないと.NETの文法的によくない、ということですね。 >極端なことを言えば System::StringクラスをC++の(アンマネージド)クラスとして定義してもVCはエラーだとは認識しないと言うことです すみません、ここが分かりませんでした。 アンマネージで定義すると、マネージとアンマネージのチェック機能が働かなくなるから、System::Stringをgcrootキャストなくても動くようになった・・・という解釈であってますでしょうか? System::Stringは.NETのクラスですよね? エラーを見た限り、System::Stringがアンマネージのような書き方がされていて、不思議に思った次第です。