
こんばんは。
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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
eclipse-Tomcatでのデバッグに...
-
エクセルVBAで、条件に一致する...
-
javascriptからjavaを呼び出したい
-
【sendkeysメソッドが動かずに...
-
引数で日付を2つ与え、その間の...
-
0歳児の指しゃぶりに関して
-
final修飾子を使っているのに、...
-
ウィンドウを最前面にできません
-
DataGridViewでセルクリックイ...
-
FEM解析の読み方は?
-
Labelコントロールに数字を代入...
-
ポストバック時のDatasourceバ...
-
エクセルVBAにおけるON TIMEメ...
-
VBAでSaveAs使用し、指定してい...
-
処理内容がほぼ同じメソッドの...
-
シリアル通信の方法(VB)
-
VBPをダブルクリックするとたま...
-
DBを扱う上でのclose()メソッド...
-
マスターページからコンテンツ...
-
for文(拡張)内の変数(ローカ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
0歳児の指しゃぶりに関して
-
エクセルVBAで、条件に一致する...
-
javascriptからjavaを呼び出したい
-
VBPをダブルクリックするとたま...
-
コマンドプロンプト実行後に画...
-
DataGridViewでセルクリックイ...
-
Labelコントロールに数字を代入...
-
final修飾子を使っているのに、...
-
ウィンドウを最前面にできません
-
配列のメソッド
-
JSPで<SELECT>の中にDBから持っ...
-
【sendkeysメソッドが動かずに...
-
メソッドをstaticにする、しな...
-
execute()
-
java 次の機能を有するメソッド...
-
PDFファイルから別ウィンドウで...
-
CALLされていないメソッドを見...
-
Excel : OpenTextメソッドが正...
-
C#で右からnカラム目に文字を挿...
-
eclipse-Tomcatでのデバッグに...
おすすめ情報