
こんばんは。
staticがついているメソッドから、staticのついていないメソッドを呼び出すことはできない」
という記載がありました。 また、console.writeLineと記載できるのはCONSOLEクラスで
WRITELINEメソッドはSTATICを利用してつくられているためです。と記載されておりました。
(C#超入門 p203より)
質問
CONSOLEクラスのWRITELIENはSTATICがついていおりますが、
PUBLIC void attack()にはついてない。のになぜConsole.WriteLineをよびだせるのでしょうか? 宜しくお願いいたします。
public void Attack() ※staticがついてないメソッド
{
Console.WriteLine(this.name + "は攻撃した");
}
-------------------Player.cs----------
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SampleRPG
{
class Player
{
// privateなメンバ変数を宣言
private string name;
private int hp;
// 以下、publicなコンストラクタとメンバメソッドを定義
public Player(string name, int hp)
{
this.name = name;
this.hp = hp;
}
public void Attack()
{
Console.WriteLine(this.name + "は攻撃した");
}
public void Defense()
{
Console.WriteLine(this.name + "は防御した");
}
}
}
-------------program.cs----
sing System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SampleRPG
{
class Program
{
static void Main(string[] args)
{
Player player = new Player("たかし", 500);
player.Attack(); // publicなメソッドなので呼び出せる
}
}
}
No.4ベストアンサー
- 回答日時:
No.2です。
> STATICがついていないメソッドからはSTATICがついているメソッドをよびだせるってことでしょうか?
そうです。
実際にお手元の本のプログラムも、それで問題なく動いていますよね?
ご回答ありがとうございます。
そうでしたか。ありがとうございます。
自分が持っているほんの解説の内容とサンプルプログラムが一致していなかったので困惑してました。
はい。動いてます。
これで、
つける・つけない、なぜついていないのかなぜついているのかが少しわかるようになりました。ありがとうございました。
理由としては、こんなのをみつけました。
staticメソッドで非staticメソッドを呼び出そうとすると、どのオブジェクトのものを呼び出せばいいかわかりません。
(オブジェクトしていすれば特定できうごくんじゃないかとおもうんですが・・・??)
逆に、非staticメソッドからstaticメソッドは呼び出せます。一つしかないからです。
これから勉強していきます。
ありがとうございました。
No.3
- 回答日時:
>>よくわからないのですが、
クラスのインスタンスを生成すると呼び出せるようになるらしいです。
オブジェクト指向の言語では、C#だけでなく、C++、Java、JavaScript、PHPなども、インスタンスを生成してから呼び出すのが、お作法です。
>>public void Defense() や attack()は 先頭にSTATICがついてないのに
STATICで定義しているConsole.WriteLineがよびだせているのがわかりません。
Defense、attackは、Playerのメンバーメソッドだから、Playerがインスタンス化されていれば呼び出せます。
No.2
- 回答日時:
??
> staticがついているメソッドから、staticのついていないメソッドを呼び出すことはできない
と
> public void Defense() や attack()は 先頭にSTATICがついてないのに
> STATICで定義しているConsole.WriteLineがよびだせているのがわかりません。
は矛盾しませんよね?
呼ぶメソッドと呼ばれるメソッドのstaticの付き方が逆です。
ご回答ありがとうございます。
私がかいたのですが、
> staticがついているメソッドから、staticのついていないメソッドを呼び出すことはできない
逆に、
STATICがついていないメソッドからはSTATICがついているメソッドをよびだせるってことでしょうか?
No.1
- 回答日時:
>>staticがついているメソッドから、staticのついていないメソッドを呼び出すことはできない
C#超入門に書かれているという、この記述が間違っているだけでしょう。
これができないなら、質問のプログラムのMainはPlayerを呼び出せないって話になります。
ご回答ありがとうございます。
おっしゃるとおり、C#超入門に書かれているということはよくわからないです。
ねっととかでしらべてみると
>MainはPlayerを呼び出せないって話になります。
よくわからないのですが、
クラスのインスタンスを生成すると呼び出せるようになるらしいです。
(STATIC→非STATICの呼び出しが可能)
今回の質問として、
public void Defense() や attack()は 先頭にSTATICがついてないのに
STATICで定義しているConsole.WriteLineがよびだせているのがわかりません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# Windows Formアプリからコンソールを呼び出して文字を出力させたい 8 2023/05/09 10:53
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- Java java final 1 2022/06/10 22:49
- C言語・C++・C# PC画面を録画するプログラムでdllの読み込みエラー 1 2023/04/22 08:31
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
- Java java 飾子を付けること(public static・・・) ・コンソールへの出力処理はmainメ 2 2022/06/16 19:34
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBAで、条件に一致する...
-
JSPで<SELECT>の中にDBから持っ...
-
final修飾子を使っているのに、...
-
drawStringで文字間隔の調整
-
CALLされていないメソッドを見...
-
引数は省略できません。とのコ...
-
onClickで関数呼出し後に、結果...
-
Labelコントロールに数字を代入...
-
javascriptからjavaを呼び出したい
-
配列のメソッド
-
boolean型のフィールドとゲッタ...
-
C#の動的キャスト
-
処理内容がほぼ同じメソッドの...
-
FEM解析の読み方は?
-
VBA コピーが出来ません…!
-
execute()
-
Excel : OpenTextメソッドが正...
-
エクセルVBAにおけるON TIMEメ...
-
worksheets & rows メソッドは...
-
コマンドプロンプト実行後に画...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBAで、条件に一致する...
-
【sendkeysメソッドが動かずに...
-
mainメソッドのthrows節で設定...
-
VBA コピーが出来ません…!
-
DataGridViewでセルクリックイ...
-
コマンドプロンプト実行後に画...
-
0歳児の指しゃぶりに関して
-
エクセルVBAにおけるON TIMEメ...
-
javascriptからjavaを呼び出したい
-
配列のメソッド
-
CALLされていないメソッドを見...
-
final修飾子を使っているのに、...
-
Labelコントロールに数字を代入...
-
VBPをダブルクリックするとたま...
-
ウィンドウを最前面にできません
-
処理内容がほぼ同じメソッドの...
-
Application.Wait の参照設定
-
C#.net Define文
-
C# 演算 最大値 最小値 表現の仕方
-
Excel VBA でExcelを終了したい...
おすすめ情報