• ベストアンサー

c# クラスとメソッド

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

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

  • ベストアンサー
回答No.2

> da.InsertCommnd.Parameters.Add(pr);  InsertCommandはメソッドではありません。パラメータです。実際には、 InsertCommand() {  get {  } } が呼ばれます。  それはいいとして、次のように分解すればいいですか? DbCommand cmd = da.InsertCommand; ParameterCollection param = cmd.Parameters; param.Add(pr);  つまり、「da.InsertCommand」とした時点でDbCommandクラスのインスタンスが返ってきます。そのインスタンスに対して「(cmd).Parameters」プロパティをコールしています。  『daオブジェクトのInsertCommandプロパティで参照されるDbCommandオブジェクトのParametersプロパティで参照されるParameterCollectionオブジェクトのAddメソッド』  なんの為にそのように分解したいのかわかりませんが、分解することより、そのプロパティ、メソッドがなんの為にあるかを理解する方が遙かに有益です。 #クラス名は不安

sohooyaji
質問者

補足

ありがとうございます。 >つまり、「da.InsertCommand」とした時点でDbCommandクラスのインスタンスが返ってきます。 とりあえずわかります。 >『daオブジェクトのInsertCommandプロパティで参照されるDbCommandオブジェクトのParametersプロパティで参照されるParameterCollectionオブジェクトのAddメソッド』 DbCommandオブジェクトにどんなプロパティがあるかは別途調べないといけないということですね。。 プロパティなのかパラメータなのかその他…とかはどう判断すればよいのでしょう。 自分でもなにを真っ先に質問すればよいかわからなくなっておりますが、クラスの継承やら正直まだまだ修行がたりないですね。

その他の回答 (2)

回答No.3

MSDNはインストールしていますか?そこにきちんと分けて書いてあります。マニュアルには目を通しましょう。

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

関数y=f(x)とz=g(y)を、z = g( f(x) ) とまとめられるように、メソッドの戻り値がなんらかのオブジェクトなら、それに対してのメソッド呼び出しを続けて記述できます ――って話でしょうか。外しているかな。

sohooyaji
質問者

補足

ありがとうございます。 そうですね、戻り値がオブジェクト ですか。ちょとわかってきました。

関連するQ&A

  • c#のToString()メソッド

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

  • 【C#】フォームクラスと他クラスとの連携について

    C#を勉強し始めたばかりの者です。 オブジェクト指向言語が初めてなので、オブジェクト指向的考え方が出来てないゆえの質問だとは思うのですが・・・。 質問内容ですが、フォームクラスと他のクラスとの連携方法がわかりません。 具体的に言いますと、フォームクラスで別のAというクラスを宣言し、そのクラスのB()メソッドを実行したときに中で発生した例外メッセージをフォームのコントロールで表示したい、という場合、どうすればよいのでしょうか? Doメソッドで例外メッセージをstringとして返し、それをフォームクラスの方で処理するしかないのでしょうか? お知恵を貸してください。よろしくお願いします。

  • C#で、あるクラスのメンバーすべての値を出力したい

    C#の勉強したて(Cの知識もへっぽこ)なので、以下のことをしたいのに、 さっぱりやり方が分かりません。 教えて君みたいな質問ですが、心の大きい方、どうぞ教えてくださいませ。 ★やりたいこと 他クラスのメンバー全部に値を入力し、かつそれを出力したい。 なお、他クラスのメンバーは数十個あるので、一つづつ代入&出力ではなく、 ループ文を使ったようなもので行えないかと模索中。 ★例 //住所録ファイルの内容をコンソール出力するプログラム。 using System; class Data_Format {   public string name;   public string address;   public string age; } class App{   public static void Read_Data(ref Data_Format obj){     obj.name = 略) テキストファイルの1行目から読込め     obj.address = 略) テキストファイルの2行目から読込め     obj.age = 略) テキストファイルの3行目から読込め   }   public static void Main() {     Data_Format ob = new Data_Format();     App.Read_Data(ref ob);     Console.WriteLine(ob.name);     Console.WriteLine(ob.adress);      Console.WriteLine(ob.age);   } } この例では Mainメソッドで、 3個のオブジェクト(ob.name, ob.address, ob.age)の内容を出力させるのに、 Conosole.WriteLineの文を3個書いています。 さらに、Read_Dataメソッドで 3個のオブジェクト(ob.name, ob.address, ob.age)の値を入力するのに、 3行費やしています。 (↑ファイルの1行目から順番に読ませるので、効率化できる??) しかし、実際に作りたいプログラムはメンバーが数十個あるので、 ループ文等を使えれば、効率よくなるのかな悪それでもいいのですが、 もっといい方があればご教授下さい。

  • Visual C++ 2008 Express Editionの”hello worldのプログラム”

    CUIのプロジェクト作成で自動的に // cui_test.cpp : メイン プロジェクト ファイルです。 #include "stdafx.h" using namespace System; int main(array<System::String ^> ^args) { Console::WriteLine(L"Hello World"); return 0; } このようなプログラミングができて一つ疑問ができたのですが、 ”Console::WriteLine(L"Hello World");” System::Console:: のメソッドの中にある ”WriteLine(L"Hello World");” なぜ”(L"Hello World")”という引数の書き方をしているのですか? ”L”と”"Hello World"”というのは別々の引数として登録しているのでしょうか? オブジェクトブラウザでSystem::Console:: WriteLineを検索したのですが、18種類あってどれを使っているのかわかりません。 教えてくださいよろしくお願いいたします。

  • virtual時のoverrideとnewの違い

    C#で、 virtualがない時はnewしか使えませんが、 virtualがある時はoverrideとnewが使えますが、 overrideとnewを使った時の違いがよく分かりません。 例えば、基本クラスに public virtual void show(){  Console.WriteLine("基本クラス"); } というメソッドがあるとして、 派生クラスで、 public override void show(){  Console.WriteLine("派生クラス"); } とすると、 基本クラスのメソッドが上書きされて、 Console.WriteLine("派生クラス"); が実行されますが、 派生クラスで、 public new void show(){  Console.WriteLine("派生クラス"); } とした場合にも、 基本クラスのメソッドが隠匿されて、 Console.WriteLine("派生クラス"); だけが実行されます。 virtual使用時において、 継承メソッドの隠匿(new)と、 継承メソッドの上書き(override)では、 一見、なにも違いがないように見えるのですが、 何か違うのでしょうか。

  • C#で独自の型を定義したい

    C# 2010 version 4.0を使用しています。 次のようなint型とstring型を混合したMixedという型を定義したいのですが、 public class Mixed { private int _TheInt = 0; public int TheInt { get { return _TheInt; } set { _TheInt = value; } } private string _TheString = null; public string TheString { get { return _TheString; } set { _TheString = value; } } public static implicit operator int(Mixed m) { return m.TheInt; } public static implicit operator Mixed(int x) { Mixed m = new Mixed(); m.TheInt = x; return m; } public static implicit operator string(Mixed m) { return m.TheString; } public static implicit operator Mixed(string x) { Mixed m = new Mixed(); m.TheString = x; return m; } } //Mixed m = 1; //Console.WriteLine(m); //これだとコンパイルエラーになる //Console.WriteLine(m.TheInt.ToString()); //「1」と表示される int i = 1; Console.WriteLine(i); //「1」と表示される object o = 1; Console.WriteLine(o); //「1」と表示される Console.WriteLineなどで表示する場合に 例えばint型なら int i = 1; Console.WriteLine(i); //「1」と表示される という具合にそのまま「1」と表示されます。 でもこのMixedの場合、 Mixed m = 1; Console.WriteLine(m.TheInt.ToString()); //「1」と表示される これでは「1」と表示されるのですが、 Console.WriteLine(m); //これだとコンパイルエラーになる このやり方だとエラーになります。 なんとかしてint型やobject型のようにToString()を使わずに 表示させることはできないでしょうか?

  • メソッド オーバーロード ete

    こんにちは 今オーバーロードやメソッドについて学習中です 今回作成したのはDB接続の 処理をするほうのクラスなのですが 同じソースはひとつにまとめろといわれました 自分なりに メソッドを作ってまとめてみたのですが まだだめなようです あとどのようにまとめれば 良いとおもいますか? 例文なども出していただけると助かります 一部ソースのせます public String[][] selectExec(String sql, int fromIdx) throws SQLException{ Statement smt = con.createStatement(); //ステートメントオブジェクト作成 SQL文を送るために作成 ResultSet aa=smt.executeQuery(sql); //SQLから要素取得 ArrayList<String> TESTNO = new ArrayList<String>(); //TESTNO用のArrayList作成 ArrayList<String> NAME = new ArrayList<String>(); //NAME用 ArrayList<String> KANA = new ArrayList<String>(); //KANA用 aa.relative(fromIdx-1); //カーソルの位置を移動 while(aa.next()){ TESTNO.add(aa.getString("TESTNO")); NAME.add(aa.getString("NAME")); KANA.add(aa.getString("KANA")); } aa.close(); //使い終わったリザルトクローズ smt.close(); //ステートメントクローズ      //オブジェクトの解放 hairetu(TESTNO,NAME,KANA); //配列に収納するメソッド呼び出し return hairetu(TESTNO,NAME,KANA); } /* * すべての行を取得 */ public String[][] selectExec(String sql) throws SQLException{ Statement smt = con.createStatement(); //ステートメントオブジェクト作成 SQL文を送るために作成 ResultSet aa=smt.executeQuery(sql); //SQLから要素取得 ArrayList<String> TESTNO = new ArrayList<String>(); //TESTNO用ののArrayList作成 ArrayList<String> NAME = new ArrayList<String>(); //KAME用 ArrayList<String> KANA = new ArrayList<String>(); //KANA用 while(aa.next()){ //Resultsetが最終行になるまで実行 TESTNO.add(aa.getString("TESTNO")); NAME.add(aa.getString("NAME")); KANA.add(aa.getString("KANA")); } aa.close(); //使い終わったリザルトクローズ smt.close(); //ステートメントクローズ      //オブジェクトの解放 return hairetu(TESTNO,NAME,KANA); } /* * 指定された行から行を取得 */ public String[][] selectExec(String sql, int fromIdx,int toIdx) throws SQLException{ Statement smt = con.createStatement(); //ステートメントオブジェクト作成 SQL文を送るために作成 ResultSet aa=smt.executeQuery(sql); //SQLから要素取得 ArrayList<String> TESTNO = new ArrayList<String>(); //TESTNO用ののArrayList作成 ArrayList<String> NAME = new ArrayList<String>(); //NAME用 ArrayList<String> KANA = new ArrayList<String>(); //KANA用 aa.relative(fromIdx); while(fromIdx<=toIdx){ TESTNO.add(aa.getString("TESTNO")); NAME.add(aa.getString("NAME")); KANA.add(aa.getString("KANA")); aa.next(); fromIdx++; } aa.close(); //使い終わったリザルトクローズ smt.close(); //ステートメントクローズ      //オブジェクトの解放 return hairetu(TESTNO,NAME,KANA); } public String[][] hairetu(ArrayList T,ArrayList N ,ArrayList K){ String[][]all=new String[3][T.size()]; all[0] = (String[])T.toArray(new String[0]);//配列TSETNOに収納 all[1] = (String[])N.toArray(new String[0]);//配列NAMEに収納 all[2] = (String[])K.toArray(new String[0]);//配列KANAに収納 return all; }/* リストから配列に収納するメソッド。 配列でリターンします */ 下のhairetuメソッドはあとから作成しました。 もうひとつ作ったのですが TEST(TESTNO,aa,"TESTNO"); TEST(NAME,aa,"NAME"); TEST(KANA,aa,"KANA"); 呼び出し↑ メソッド public ArrayList TEST(ArrayList T,ResultSet a ,String s) throws SQLException{ T.add(a.getString(s)); // リストにSQL文を収納 return T; } これは却下されました 見づらいとは思いますが いろいろアドバイスください

    • ベストアンサー
    • Java
  • C#で配列のフィールドを取得したい

    C#2.0を試用しています。 次のような書き方ではプリミティブ型は取得できるのですが、 配列のフィールドは取得できないので、 なんとかして取得する方法はないのでしょうか? public class MasterClass {  public int a = 2;  public int[] b = new int[] { 1, 2 };//←取得できない } Object obj = new TestClass(); Type type = obj.GetType(); foreach (FieldInfo fi in type.GetFields()) {  object tmp = fi.GetValue(obj);  Console.WriteLine(fi.Name + ":" + tmp); } System.Console.ReadLine();

  • 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() で、少なくとも数値型の暗黙の変換はしてくれるようなことにできないでしょうか。 よろしくお願いします。

  • Javaのメソッドやクラスを分かりやすく解説した本

    アルバイト先で新人社員のJAVA個別レッスンを頼まれました。 理解している、実行できる ・大体の文法 ・詳細設計書(Class名とそれに必要な要素)があればクラスは書ける。(形式に添ってクラスは書ける) ・オブジェクト指向は大体理解できている 出来ないこと 上のできる内容でClassは書けるとありましたが、 ・複数のClassを作るときに、それらに必要な要素を考えた事がありません。 ・複数のclassを作るときに、必要な全要素を出してあげても、どの要素がどのClassに必要か分からない。 ・Classは書けてもその中のメソッドを考えることができない。 ・引数がよく分かっていない。 この出来ないことを出来るようにするためには、 最初に、必要な要素を出してClassを作る練習 次に、Classに必要な要素を自分で考える練習 次に、メソッドの処理を日本語で出すのでJavaに置換える練習 次に、メソッドを最初から自分で書く練習 次に、引数について理解する・・・練習 が必要だと思います。 この部分だけを分かりやすく解説している本がないか探しています。 できれば本が良いのですが、WEBサイトでもかまいません。 どなたか同じように詰まった方がいらっしゃれば教えて下さい。 どうぞよろしくお願いします。

    • ベストアンサー
    • Java

専門家に質問してみよう