# a-b が bクラスのインスタンスを受け取る変数ですか?
この変数のスコープが main()メソッドの中だからです。
new b() の結果をメソッド内のローカル変数ではなく、クラスのメンバ変数に格納するようにすれば他のメソッドでも使えるようになると思います。
C# Unityです。
ものすごい初歩的な質問なのですが、なぜ、ほかのソースファイルで定義されているメソッドは、Classの中でなく、メソッドの中でしか使えないのですか?
public class a
{
public void main()
{
b a-b = new b();
a-b.Bmethod();
}
}
上のコードだときちんとa-bが認識されているので、Bmethodメソッドを使えるのですが、
public class a
{
b a-b = new b();
a-b.Bmethod();
public void main()
{
}
}
こちらだと、なぜかa-bが認識されていないらしく、Bmethodメソッドが使えません。
上のように、aクラスにて、bクラスのa-bメソッドを使いたいとき、「メインの外、aクラスの中」で使えないのはなぜですか?
わかりにくい質問だったらごめんなさい。
# a-b が bクラスのインスタンスを受け取る変数ですか?
この変数のスコープが main()メソッドの中だからです。
new b() の結果をメソッド内のローカル変数ではなく、クラスのメンバ変数に格納するようにすれば他のメソッドでも使えるようになると思います。
@noutarins
Questionerpublic class a
{
b a_b = new b();
public void main()
{
a_b.Bmethod();
}
public void sub()
{
//mainでもsubでもどっちでも使える
a_b.Bmethod();
}
}
@noutarins
Questioner@noutarins
Questioner「メインの外、aクラスの中」で使えないのはなぜですか?
それは「ほかのソースファイルで定義されているメソッド」に限った話ではありません。
C#のクラスの中でコードを書くことができるのは
get
やset
の中=
の右辺)に限られています。
たとえば
public class a
{
int n = 0;
Console.WriteLine("Hello!");
n++;
}
と書くことができたとして、「Hello!」を出力させるにはどうすればいいでしょう?nが加算されるのはどういう時でしょう?
こんな書き方ができたとしても実行させる方法がないので無意味なんです。
@noutarins
Questioner@noutarins
Questionerどのタイミングでメソッドが実行されることを想定されているのでしょうか?
他の回答者さんも述べているようにC#では(というか他の言語でもですが)classの中でメソッドに属していない場所に処理を記述するのは文法が間違っています。
もしインスタンス化した時に実行されることを期待するのでしたらコンストラクタの中で記述するのが正しいです。
class A {
public A() {
B b = new B();
b.SomeMethod();
}
}
あと質問自体とは関係のないことですが、C#は比較的コーディング規約が統一されているので、サンプルを載せるときは規約に従った形で記述されていると回答者が読みやすいと思います。
https://docs.microsoft.com/ja-jp/dotnet/csharp/fundamentals/coding-style/coding-conventions
少なくともクラス名が小文字なのと変数名に-
があるのは読みにくいなと……
初見で減算かと誤読しました
@noutarins
Questioner