C#を基本から勉強しています。
コンストラクタというのがありますが、そもそも引数ありのコンストラクタってあるのでしょうか?
ある場合、Cのような考え方になるのでしょうか?
Cは実行時に引数を与える場合があると思います。
C#でもそのような動き方になるのでしょうか?
C#実行時に引数を与えて実行しなければいけないみたいな。。。
詳しい方教えてください。
お願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/12/09 01:36
2018/12/09 06:45

回答2件
0
msdn ライブラリを見てください、ひとつのクラスのコンストラクターにも多数のオーバーロードがあるのが分かります。当然需要があるからです。
【追伸】
具体例を示した方がよさそうですので、SQL Server にアクセスするときに使う SqlConnection, SqlCommand, SqlParameter クラスのコンストラクタで、引数有りと引数無しの場合のサンプルを書いておきます。
どちらがスマート&可読性が高いかと言えば前者ではないでしょうか?
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data; using System.Data.SqlClient; namespace ConsoleApplication2 { class Program { static void Main(string[] args) { string connString = @"Data Source=(local)\sqlexpress;Initial Catalog=NORTHWIND;Integrated Security=True"; string query = "SELECT [ProductID], [ProductName] FROM [Products] WHERE [CategoryID]=@ID"; // コンストラクタ引数有り using (SqlConnection connection = new SqlConnection(connString)) { using (SqlCommand command = new SqlCommand(query, connection)) { command.Parameters.Add(new SqlParameter("@ID", SqlDbType.Int)); // これ以下は同じ command.Parameters["@ID"].Value = 1; connection.Open(); using (SqlDataReader reader = command.ExecuteReader()) { while (reader.Read()) { Console.WriteLine($"ID: {reader.GetInt32(0)}, Name: {reader.GetString(1)}"); } } } } // コンストラクタ引数無し using (SqlConnection connection = new SqlConnection()) { connection.ConnectionString = connString; using (SqlCommand command = new SqlCommand()) { command.CommandText = query; command.Connection = connection; SqlParameter param = new SqlParameter(); param.ParameterName = "@ID"; param.SqlDbType = SqlDbType.Int; command.Parameters.Add(param); // これ以下は同じ command.Parameters["@ID"].Value = 1; connection.Open(); using (SqlDataReader reader = command.ExecuteReader()) { while (reader.Read()) { Console.WriteLine($"ID: {reader.GetInt32(0)}, Name: {reader.GetString(1)}"); } } } } } } }
その他、例えば(あくまで例えばですが)、Windows Forms アプリで Form1 で初期化してDB からデータを Fill した DataTable オブジェクトへの参照を Form2 に渡す場合など、Form2(DataTable table) というコンストラクタを定義して、Form2 を初期化するときに渡すということも可能です。
投稿2018/12/08 07:23
編集2018/12/08 12:48
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ベストアンサー
C言語で構造体を初期化する関数を作ったことがあるなら、それを言語仕様として定義したのがコンストラクタだと思って下さい。
構造体の中に初期化関数も書けるみたいな感じです。
引数の考え方は同じです。
ただしコンストラクタだけ覚えてもC#の事はなにもわからないと思いますので、入門書なり入門Webページなりを呼んだほうがいいです。
追記:後から思いついたのですが、引数有のコンストラクタと引数なしのコンストラクタが同じクラスに書けることを言っているのでしょうか?
それはC言語にはないオーバーロードというものです。
呼ぶときの引数によって、呼ばれるコンストラクタ(メソッドも)を区別できるのです。
投稿2018/12/08 06:49
編集2018/12/08 07:02総合スコア4152
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/12/08 07:57
2018/12/08 08:31
2018/12/08 08:33
2018/12/08 09:07
2018/12/08 09:29
2018/12/08 09:39
2018/12/08 10:08

退会済みユーザー
2018/12/09 01:09

退会済みユーザー
2018/12/09 06:33
2018/12/09 07:49

退会済みユーザー
2018/12/09 08:46

あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。