2012-02-08 13 views
2

クラスのインスタンスからメソッドにアクセスできますか?例: C#クラス:インスタンスによるメソッドへのアクセス

class myClass 
{ 
     private static int n = 0; 

     public static myClass() 
     { n = 5;} 

     public static void Afis() 
     { 
       Console.WriteLine(n); 
     } 

} 

ボイドメインで

static void Main() 
{ 
      myClass m = new myClass(); 
      m.Afis(); 
} 

これは私を与える:cannon be accessed with an instance referece。私は静的関数を宣言しているからですか?それがそうなら、私は静的を使用するべきですか、そうでない場合はC++で静的なものを宣言すれば、それは一度だけ初期化されます。それはC#の場合ですか?

+1

'myClass.Afis()'を使用するか、メソッド宣言の 'static'キーワードを削除してください。 – yas4891

+1

[この質問を見る](http://stackoverflow.com/questions/2308681/what-is-the-difference-between) -a-static-variable-in-c-vs-c) 'static 'のC++とC#の意味を比較します。 – PHeiberg

答えて

3

staticメソッドにアクセスするには、変数名ではなくクラス名を使用する必要があります。

myClass.Afis(); 

あなたがそれらを使用し、それらを使用してはならない時に求めてきましたように私はStatic Classes and Static Class Membersプログラミングガイドへのリンクを添付しました。

プログラミングガイドから少し発揮:

A static class can be used as a convenient container for sets of methods that just operate on input parameters and do not have to get or set any internal instance fields. For example, in the .NET Framework Class Library, the static System.Math class contains methods that perform mathematical operations, without any requirement to store or retrieve data that is unique to a particular instance of the Math class.

1

はい - あなたは容疑者として - あなただけの種類自体を経由して、オブジェクトのインスタンスを経由して静的メソッドにアクセスすることはできません。すなわち

:当然

myClass.Afis(); 

- は逆も真です。型を介してインスタンスメソッドにアクセスすることはできません。

あなたは、ときに、ノーへの詳細については、このようなthis oneなどの他の質問にstaticを使用しますが、私はstaticは(だけのカップルの名前に)テスト容易性と多型のような特定の望ましいものを制限することを言うことができ、そのためあなたの「デフォルトのポジション」であってはなりません。

1

静的メソッドは、クラスのインスタンスではなくクラス自体を通じて呼び出されます。正確

myClass.Afis(); 
1

それがゆえ、静的な機能だとはのように呼ばれています。

If that is so when should I use static

インスタンス変数にアクセスする必要はありません。

because in c++ if i declare something with static it just initialize once. Is that the case with c#?

静的コンストラクタを意味する場合は - はい。

基本的には、「クラス」ではなく、インスタンス化できない静的なクラスです。

1

Is it because i declared the function static?

: - 権利だ

static void Main() 
{ 
    myClass m = new myClass(); 
    myClass.Afis(); 
} 
1

スタティックメソッドは、インスタンスにはないクラスの広告に接続するメソッドです。 すべてのインスタンスで同じメソッドを使用できるようにする場合は、これを使用します。 たとえば、クラスIのインスタンスを数えたい場合は、静的プロパティを使用します。 静的メソッドとプロパティにアクセスするには、インスタンス名ではなくクラス名を使用する必要があります。

0

メソッドを静的としてマークしました。したがって、あなたは型を介してそれにアクセスする必要があります。

スタティックメソッドは、メソッドが型を参照し、インスタンス情報を使用しない場合に使用されます。 String.IsNullOrEmpty(string s)はそのような静的メソッドです。これは文字列クラスに属しますが、インスタンス環境は必要ありません。すべてのオブジェクトがオブジェクトから継承するメソッドであるToString()は、文字列として表現するものを定義するインスタンスコンテキストが必要です。

関連する問題