C#のToString()メソッドについて

このQ&Aのポイント
  • C#のすべてのオブジェクトはToStringメソッドを継承しています。このメソッドは、オブジェクトの文字列形式を返します。
  • 例えば、int型の変数はToStringメソッドを持ち、その変数の内容を文字列として返すことができます。
  • オブジェクト指向の概念を理解すると、int型の変数が関数やメソッドを持つことが理解できます。クラスを学ぶとより詳しく理解できるでしょう。
回答を見る
  • ベストアンサー

c#のToString()メソッド

http://msdn.microsoft.com/ja-jp/library/ms173154(v=vs.90).aspx のページによると C# では、すべてのオブジェクトが ToString メソッドを継承します。このメソッドは、該当するオブジェクトの文字列形式を返します。たとえば、int 型の変数はすべて ToString メソッドを持ち、次のようにその変数の内容を文字列として返すことができます ↑と書いてあるのですが、C言語しか知らない自分にとってint型の変数が関数、メソッドを持つ、 という概念が理解できません。これはオブジェクト指向の話なのでしょうか?クラスを理解すると わかるようになりますか? どなたかよろしくお願いします。

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

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.3

こういうことは、言語によって違うので、他の言語の考えをそのまま持ってこようとすると混乱の元です。 > hensuu = 100; と入力したら、hensuu構造体のなんというメンバに格納されるのでしょう。 まず、C#では、「100」自体も「Int型の構造体」になっています。 C言語のintのような「単独の数値しか持たない型」というのがありません。 C言語で無理矢理書くなら struct integer { int value; などなど} hensuu, value100 ; ... asignInteger(&hensuu,&value100) ; /* hensuuの各メンバーを、value100と同等のものにする */ ということです。 そして、どのメンバーにどんな形で格納されるか、というのは、通常は考える必要はありません。 hensuu=100 ; としたら、hensuuが『100と値の整数』として振舞ってくれれば、中でどんな計算をしていようが関係無いのです。 そもそも、メンバー変数(フィールド)はMaxValue,MinValueという定数しか公開されていないのですから、内容を知りようがありません。 > また、余談ですが構造体、といった場合メソッドは持たないものではないでしょうか。 言語によって違います。 C#では、structもメソッドを持ちます。 C++でも、structはメソッドを持つことができます。 Cでは、そもそもクラスもメソッドもありません。

tranceporter
質問者

お礼

短期間でとても勉強になりました。同時にすごい荒波に投げ出されたような・・・ また質問を見かけましたら是非よろしくお願いします。ありがとうございました。

その他の回答 (2)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

「ただのintで整数型の宣言もできると思う」ってのは, 具体的にはどういうことですか?

tranceporter
質問者

補足

たとえば、私の持っている「独習C#」によると、 int hensuu; と宣言した場合、integer型のhensuuという変数が作成されるとしか書いていません。 これがもし初心者が混乱しないように余計なことは書いていないだけでしょうか。 本当はint32構造体の宣言だったとした場合、 hensuu = 100; と入力したら、hensuu構造体のなんというメンバに格納されるのでしょう。 また、余談ですが構造体、といった場合メソッドは持たないものではないでしょうか。 メソッドとメンバ変数を持っているのですからint32はクラスと呼ぶのでは? よろしくお願いします。

  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.1

>これはオブジェクト指向の話なのでしょうか? そういう認識でよろしいかと思われます。 ちなみに、C#のint型は.NET FrameworkのSystem.Int32構造体になります。 そんなワケでSystem.Int32型のメソッドとかが使えることになります。 http://msdn.microsoft.com/ja-jp/library/system.int32%28v=vs.100%29.aspx

tranceporter
質問者

お礼

あ、int という宣言は変数の宣言でなく構造体を宣言しているのですね それで納得いたしました。ありがとうございます。

tranceporter
質問者

補足

でも、ただのintで整数型の宣言もできると思うのですが、その区別の方法などあるのでしょうか

関連するQ&A

  • toString()メソッドについて

    ある本に、 ------------------------------------------------------------------------- System.out. println(car1); 特に何も準備せずに上のコードを記述すると、Objectクラスから継承したtoString()メソッドが呼び出されます。 そしてこのtoString()メソッドの戻り値となっている「Car@数値」という文字列が画面に出力されるようになっているのです。 ------------------------------------------------------------------------- と書いてありましたが、toString()メソッドの戻り値となっている「Car@数値」という文字列が画面に出力とはいったいどういう意味でしょうか?

    • ベストアンサー
    • Java
  • ArrayクラスとtoStringについて

    問題集で次のプログラムを見掛ました。 public class Main{  public static void main(String args[]){   int[] array = new int[0];   System.out.println(array);  } } これを実行するとprintlnメソッドで toStringメソッドが呼び出されますが、 ArrayクラスはObjectクラスを継承しているため、 toStringメソッドもObjectクラスから継承されているので、 結果として、配列の要素数が0であっても、 エラー等が発生せずハッシュコードが表示される、ということです。 ObjectクラスのtoStringメソッドが ハッシュコードを返すものであるのは理解できます。 でも、なぜ要素数が1以上で何かしらの要素が存在する場合は、 ハッシュコードが返らないのでしょうか? 詳しい方、解説をお願いします。

  • toString()メソッドについて2

    toString()メソッドは、自分で設計したクラスで定義しておく(オーバーライドする)とより便利です。「Car@数値」よりももっとわかりやすい文字列を返すようにすることができるからです。 とある本に書いてありますが、オーバーライドするとわかりやすい文字列を返すとは どういう意味でしょうか?

    • ベストアンサー
    • Java
  • c# クラスとメソッド

    c#最近始めました。オブジェクト指向も始めてみたいな感じです。 例えば、 Console.WriteLine(aa); という命令があるとすると ConsoleのWriteLineというメソッドを呼び出す というのはなんとなくわかるのですが、 da.InsertCommnd.Parameters.Add(pr); とかとなるともうお手上げ状態です。 daオブジェクトのInsertCommandメソッドの… そのつぎからはなんなのでしょう。 宜しくお願いいたします

  • Stringクラスのlengthメソッドについて

    こんにちは、Stringクラスのlengthメソッドについて質問させてください。 今まで配列のlengthは、宣言時に長さが決定するからメソッドではなく、finalフィールドで十分。 ArrayListだとかは長さが変わるからメソッドという意識を持っていました。 (カプセル化の概念とも関わりますが) 先日その話しをしていたら、「でも文字列(Stringオブジェクト)の長さも不変だよね。」と言われました。 確かに文字列の長さは不変なのに、長さの取得にはメソッドを使っています。 言語仕様として一貫性を持たせるなら、配列もlengthメソッドにするか、文字列をlengthフィールドにしたほうが綺麗だと思うんです。 Stringクラスのソースコードを見ていたら、文字列の長さは内部的に private int count; と宣言されていました。 そして、lengthメソッドは return count; しているだけでした。 ただ、このcountフィールドに値を代入しているのはコンストラクタ内だけだったので、 public final int length; とすれば、良かったのでは?と思いました。 この考えについて、 それは間違っている、とか歴史的な背景などご存知でしたらご教授ください。 よろしくお願致します。

  • オブジェクト指向プログラミングの多態性のメリット、目的は?

    オブジェクト指向プログラミングを学んでいます。 基本概念の多態性がどうも理解できません。 メリット、目的はなんなのでしょうか? 上位クラスを継承し、 その継承されたクラスのメソッドを上書きするということと何が違うのでしょうか? 学習の参考にしている書籍の中には ”多態性を使ったオブジェクト指向プログラミングの典型例”として、 異種リスト(=上位型に下位型を代入し、一族のオブジェクトを一括管理する)を紹介しています。 多態性はこのような使用のみを目的としているのでしょうか?

  • C++のクラス継承に関する参考書

    お世話になります。 現在、C++言語を理解するため、 「やさしいC++」第3版:高橋麻奈(SoftBank Creative) を読み進めています。 プログラミングは好きな方で、上記参考書は若干簡単に思えます。 C++で重要なのが「オブジェクト指向」や「クラスの継承」といった概念であるとよく耳にしますが、上記参考書のあとにオススメの参考書をお教えください。 知識レベルとしては、C++で書かれたライブラリを理解し使える・作れる程度を考えています。 よろしくお願いします。

  • C#で実行時にメソッドの返り値の型を変化させる

    C# で、実行時にメソッドの返り値の型を変化させることは可能でしょうか? たとえば、 public class MyData { object o; public void setValue( object a ) { o = a; } public object getValue() { return o; } } というクラスがあるとき、 static void Main(string[] args) { MyData a = new MyData(); a.setValue( 3 ); Console.WriteLine( a.getValue().GetType().ToString() ); int i = (int)a.getValue(); } というコードを実行すると、 System.Int32 と表示されます。Main の 4 行目で、(int)のキャストをはずすと、object から int への暗黙の変換はできませんというコンパイルエラーになります。 この(int)のキャストをしなくてもエラーにならないような getValue の関数はできないでしょうか? o は、数値型であるとします。 たとえば、MyData に、 public int getInt() { return (int)o; } とすれば、必ず int を返すようなメソッドはできると思うのですが、これだと、getByte() や、getDouble() などのように、考えられるすべての型を想定してメソッドを作ることになってしまいます。 そうではなく、getValue() で、少なくとも数値型の暗黙の変換はしてくれるようなことにできないでしょうか。 よろしくお願いします。

  • Cに慣れてしまった人、どのようにJAVAを克服しましたか?

    JAVAについて質問です。 私はC言語をこの1年間勉強してきました。 そしてC言語のコーディングの仕方に慣れきってしまったせいか、どうしてもJAVAのオブジェクト指向 というものが理解できません。 コーディングも上手くいきません。 クラスやメソッドやインスタンスがどうとかコンストラクタが・・・などの横文字が全然意味が分かりません。 C言語で言うとどれがどこに当たるのか!? とかいう風に置き換えて考えようとしても上手く行きません。 こういう、横文字が理解できて、オブジェクト指向の考え方に慣れる為にはどのようにしたらいいでしょうか? また、C言語からプログラミングに入って、後からJAVAを勉強する場合、どのような点に気をつければ良いでしょうか? また、JAVAの克服法を教えてください。

    • ベストアンサー
    • Java
  • 【オブジェクト指向について】

    【オブジェクト指向について】 こんにちは。初めて質問をさせていただきます。 さて、ただいまVBを勉強中なのですが、オブジェクト指向のところで躓いてしまいました。 質問したい事は以下の点です。 (1) オブジェクト指向の理解について   オブジェクト指向とは、プログラミングをするときに変数や機能などをクラスというものに格納しておくことで、プログラミングを円滑にすすめるための概念であると理解していますが、この理解は正しいのでしょうか? ご回答お待ちしております。よろしくお願いいたします。

専門家に質問してみよう