2013-01-08 213 views
1

我对自己在C#方法范围,最好的情况下使用在ASP.Net的几个相关问题:公共静态,公共和静态方法有什么区别?

  1. C#,之间有什么区别:
    • 一个public static方法
    • 一个public方法
    • 一个static方法
  2. 我正在使用MVC网络服务;在我的问题#1中,在方法范围方面,每个method scope类型的内存占用情况会带来怎样的差异,例如,在使用它之后,请问static会释放函数内存?
+0

public?....... –

回答

11

public本身意味着这是基于实例的部件,其是对外部呼叫者(那些具有访问类型本身)访问。

static本身意味着该成员不是基于实例的:您可以在不需要任何特定实例(甚至根本不需要任何实例)的情况下调用它;如果没有可访问性限定符,则假定为非公共 - 因此外部呼叫者无法访问该成员。

public staticstatic方法到外部呼叫者访问。

在这两种情况下,内存使用情况都是相同的:在方法中声明的任何变量的作用域都是方法调用本身(作为实现细节:通过堆栈;同样:我假设没有“捕获变量” asyncyield使用),

这不是特定于ASP.NET/MVC。然而,控制器上的“动作”方法是IIRC,预计是公开的/实例,因此public修饰符,和没有static修饰符。

基本上:

无障碍:

  • 没有指定:默认为 “私有”(或 “内部” 为外类)
  • “私人”:仅适用于该类型的内码
  • “受保护”:提供给代码类型或子类型的内部
  • “内部”:在同一个组件提供给代码
  • “受保护的内部”:无论是 “保护” (工会)的 “内部”
  • “公”:提供与接入类型的所有呼叫者

静态的/ etc:

  • 没有指定:基于实例;需要一个实例,并且代码可以自动访问实例成员(通过this.)和static成员
  • “static”:不需要实例;代码必须static成员自动存取只
3

没有访问说明符的静态方法将是私有的。你不能在课堂外访问它。

请考虑以下类。

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 
0

public是访问修饰符。所以在任何地方应用它都是指范围。

-1
static Foo 

不是公开的,这意味着它在课堂以外是不可见的。

3

默认情况下,类成员是私有的,所以如果你没有指定你的静态方法是plublic的,你将无法从课堂外访问你的方法。

有关访问修饰符的更多信息请参见: Access Modifiers (C# Programming Guide)

2

这一切都很好的人,为您提供的例子,但这些东西都很好已经记录在互联网上,和一个非常简单的搜索可以产生明确结果。让我沉醉你,找对主题MSDN引用(两个主题,顺便说一句,成员访问和非实例成员不严格相关):

首先你必须access modifiers,特别是public在这种情况下:

公共

类型或构件可以通过在同一 组件的任何其他代码或引用它的另一个组件进行访问。

无论成员是否为static,这都是无关紧要的。

然后,你必须static, non-instance stuff

静态

静态类和类成员被用于创建不需要创建类的实例来访问数据和功能 。静态 类成员可以用来分离数据和行为是 独立于任何对象标识

的因此,任何差异是可能的接入和“实例”规则的组合。

内存管理是另一回事;没有一个方法,属性,字段,不管访问和上下文,都会奇迹般地减少内存,这就是你作为开发人员必须考虑的每一行代码(在编码时利用CLR的内置内存管理的帮助适当地)。