C# でのメソッド スコープと、ASP.Net でのベスト ケースの使用法に関するいくつかの関連する質問があります。
- C#では、次の違いは何ですか:
public staticメソッド _publicメソッド _staticメソッド _
- MVCとWeb サービスを使用しています。
method scope私の質問#1のメソッドスコープに関して、各タイプのメモリ占有の場合、結果としてどのような違いが生じるでしょうか。たとえば、static使用後に関数メモリを解放しますか?
C# でのメソッド スコープと、ASP.Net でのベスト ケースの使用法に関するいくつかの関連する質問があります。
public staticメソッド _publicメソッド _staticメソッド _method scope私の質問#1のメソッドスコープに関して、各タイプのメモリ占有の場合、結果としてどのような違いが生じるでしょうか。たとえば、static使用後に関数メモリを解放しますか?publicそれ自体は、これが外部の呼び出し元(型自体にアクセスできる呼び出し元)がアクセスできるインスタンスベースのメンバーであることを意味します。
staticそれ自体は、メンバーがインスタンスベースではないことを意味します。特定のインスタンス(またはインスタンスさえも)を必要とせずに呼び出すことができます。アクセシビリティ修飾子がないと、非公開と見なされます。そのため、外部の呼び出し元はメンバーにアクセスできません。
public static外部の呼び出し元がアクセスできるstaticメソッドです。
メモリ使用量はどちらの場合も同じです。メソッドで宣言された変数はすべて、メソッド呼び出し自体にスコープされます(実装の詳細として:スタックを介して;また:「キャプチャされた変数」はなく、asyncまたはyield使用法はないと想定しています)、
これには、ASP.NET/MVCに固有のものはありません。ただし、コントローラーの「アクション」メソッドは、IIRCであり、パブリック/インスタンスであることが期待されているため、修飾子があり、public修飾子がありませんstatic。
基本的に:
アクセシビリティ:
静的/など:
this.)およびstaticメンバーに自動的にアクセスできますstaticメンバーにのみ自動アクセスできますクラス メンバーはデフォルトでプライベートであるため、静的メソッドがパブリックであることを指定しないと、クラスの外部からメソッドにアクセスできなくなります。
アクセス修飾子の詳細については、 アクセス修飾子 (C# プログラミング ガイド)を参照してください。
アクセス指定子のない静的メソッドはプライベートになります。クラス外からアクセスすることはできません。
次のクラスを検討してください。
class TestClass
{
public int MyProperty { get; set; }
static void SomeStaticMethod()
{
}
public static void SomeOtherStaticMethod()
{
SomeStaticMethod(); // You can use the static method inside
}
public void InstanceMethod()
{
SomeStaticMethod();
}
}
あなたがそれを使用しているとき:
TestClass tc = new TestClass();
tc.InstanceMethod();
TestClass.SomeOtherStaticMethod();
TestClass.SomeStaticMethod(); // Thats an error because SomeStaticMethod is private and not accessible
例を提供するのは非常に良いことですが、これらのことはすでにインターネット上で十分に文書化されており、非常に単純な検索で確実な結果を得ることができます。トピックに関するMSDNリファレンスを見つけてください(ちなみに、メンバーアクセスと非インスタンスメンバーは厳密には関連していません)。
まず、特にこの場合、アクセス修飾子があります。public
公衆
タイプまたはメンバーには、同じアセンブリまたはそれを参照する別のアセンブリ内の他のコードからアクセスできます。
これは、メンバーがそうであるかどうかにstatic関係なく、関係ありません。
次に、静的な非インスタンスのものがあります:
静的
静的クラスとクラスメンバーは、クラスのインスタンスを作成せずにアクセスできるデータと関数を作成するために使用されます。静的クラスメンバーを使用して、オブジェクトIDに依存しないデータと動作を分離できます
したがって、違いは、可能なアクセスルールと「インスタンス」ルールの組み合わせです。
メモリ管理は別のものです。アクセスやコンテキストに関係なく、1つのメソッド、プロパティ、フィールドがメモリを魔法のように削減することはありません。これは、開発者がコードの各行で検討する必要があることです(コーディング時にCLRの組み込みメモリ管理の助けを借りて)適切に)。
publicアクセス修飾子です。したがって、適用される場所はどこでもスコープを参照します。
static Foo
public ではありません。つまり、クラスの外では見えません。