c#にて、mainメソッドにstaticがついてるのはなぜでしょうか?
また、「staticがついているメソッドから、staticのついていないメソッドを呼び出すことはできない」という文章を読みました。なぜ呼び出してはいけないのですか?
また、別のクラスで定義したメソッドは、staticをつけなくても、(staticがついている)Mainメソッド内で呼び出せました。なぜstaticがついているメソッドからstaticがついていないメソッド呼び出せたのですか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
c#にて、mainメソッドにstaticがついてるのはなぜでしょうか?
Main メソッドはプログラムのエントリポイントで、エントリーポイントは静的 (static) メソッドでなければならないという取り決めがあるからです。
詳しくは以下の記事の「Main の引数、戻り値」のセクションを見てください。
[雑記] エントリーポイント
http://ufcpp.net/study/csharp/structured/miscentrypoint/
また、「staticがついているメソッドから、staticのついていないメソッドを呼び出すことはできない」という文章を読みました。なぜ呼び出してはいけないのですか?
何を見たのか分かりませんが(参考にした記事の url を書くようにしてくださいね)、それは誤解だと思います。
「staticのついていないメソッド」=「インスタンスメソッド」ですが、そのメソッドが定義されているクラスを初期化してインスタンス化すれば当然のことながら呼び出すことはできます。
投稿2018/05/27 00:05
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/27 00:33
退会済みユーザー
2018/05/27 00:57
0
非staticメソッドはオブジェクト毎に紐づきます。ですので、オブジェクトに数が100個ならば100個にそれぞれ割り当てがあります。
一方、staticメソッド、フィールドはオブジェクトに紐づきません。クラスにおいて共有で使われるためです。オブジェクトの数が複数でも0でも関係なく1つずつです。ですので、staticメソッドで非staticメソッドを呼び出そうとすると、どのオブジェクトのものを呼び出せばいいかわかりません。
逆に、非staticメソッドからstaticメソッドは呼び出せます。一つしかないからです。
投稿2018/05/26 15:00
総合スコア4830
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/05/27 00:14
退会済みユーザー
2018/05/27 00:23
2018/05/27 03:17
退会済みユーザー
2018/05/27 03:47
0
ベストアンサー
簡単に言うと、
static をつけた関数というのは、new で生成しなくても使うことができるから、ですね
main関数のように、最初にとにかく実行(読み出し)しなくてはならないものにはstatic つけないと動かせることはできませんな。
また、「staticがついているメソッドから、staticのついていないメソッドを呼び出すことはできない」という文章を読みました。なぜ呼び出してはいけないのですか?
呼び出そうと思えば呼び出せます
それには、その(staticがついてない)メソッドが属するクラスを new して、その上で呼び出す必要があります
staticがついてないメソッドを直接呼び出すことができない、というのが正確ですねー
投稿2018/05/27 00:06
編集2018/05/27 00:10総合スコア87774
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
マイナス評価するのに理由を求められるシステムだったので回答として記入
静的メソッドから、同じクラスの静的メソッドではないメソッドを呼び出そうとする場合にも、同じ問題が起きます(中略)この場合静的メソッドであるStaticMeth()の中から、静的メソッドではないメソッド(つまり、インスタンスメソッド)であるNonStaticMeth()を呼び出そうとすると、コンパイルエラーとなります。
[独習C#第3版 pp.238-239]
こういうことを言ってんじゃないかと思います。この本では回答は、
ただし、次の点に注意してください。静的メソッドは、そのクラスの特定のインスタンスメソッドを呼び出すことも(中略)できます。ただし、それを行うためには必ずそのクラスの特定のオブジェクトインスタンスを使わなければなりません。
[同書 p.239]
のように続きに、SurferOnWwwさんやy_waiwaiさんが書いておられることが書いてあります(よほどの資料でないかぎりそのような断りがあると推測します。万一書いてないなら、その資料は即刻破棄すべき)
投稿2018/05/29 05:05
総合スコア12705
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。