public static,public和static方法有什么区别?
我有一些关于C#方法范围的相关问题,以及ASP.Net中的最佳用例:
- 在C#中 ,有什么区别:
-
public static
方法 -
public
方法 -
static
方法
-
- 我正在使用MVC和Web服务 ; 就我的问题#1中的方法范围而言,在每个
method scope
类型的内存占用情况下会产生什么差异,例如,static
会在使用后释放函数内存吗?
public
本身意味着这是一个基于实例的成员,外部调用者(可以访问类型本身的访问者)可以访问它。
static
本身意味着该成员不是基于实例的:您可以在不需要任何特定实例(甚至任何实例)的情况下调用它; 如果没有可访问性限定符,则假定为非公共 – 因此外部调用者无法访问该成员。
public static
是外部调用者可以访问的static
方法。
在两种情况下内存使用都是相同的:方法中声明的任何变量都限定在方法调用本身(作为实现细节:通过堆栈;还有:我假设没有“捕获变量”,并且没有async
或yield
使用)
这没有什么特定于ASP.NET / MVC。 但是,控制器上的“动作”方法是IIRC,预计是公共/实例,因此使用 public
修饰符, 而不使用static
修饰符。
基本上:
辅助function:
- 无指定:默认为“private”(或外部类的“internal”)
- “private”:仅适用于该类型内的代码
- “protected”:可用于该类型或子类型内的代码
- “internal”:可用于同一程序集中的代码
- “受保护的内部”:“受保护” 或 “联合”“内部”
- “public”:所有可以访问该类型的呼叫者都可以使用
静态/等:
- 无指定:基于实例; 需要一个实例,代码可以自动访问实例成员(通过
this.
)和static
成员 - “静态”:不需要实例; 代码只能自动访问
static
成员
没有访问说明符的静态方法将是私有的。 你不能在课外访问它。
考虑以下课程。
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
默认情况下,类成员是私有的,因此如果您没有指定静态方法是plublic,那么您将无法从类外部访问您的方法。
有关访问修饰符的详细信息,请参阅: 访问修饰符(C#编程指南)
为人们提供示例非常好,但是这些内容已在Internet上得到很好的记录,并且非常简单的搜索可以产生明确的结果。 让我放纵一下,找到关于主题的MSDN参考(顺便说一句,两个主题,成员访问和非实例成员并不严格相关):
首先你有访问修饰符 ,在这种情况下特别public
:
上市
类型或成员可以由同一程序集中的任何其他代码或引用它的另一个程序集访问。
这是成员是否是static
的情况,这是无关紧要的。
然后你有静态的,非实例的东西 :
静态的
静态类和类成员用于创建可在不创建类实例的情况下访问的数据和函数。 静态类成员可用于分隔独立于任何对象标识的数据和行为
因此,任何差异都是可能的访问和“实例”规则的组合。
内存管理是另一回事; 没有一个方法,属性,字段,无论访问和上下文,都会神奇地减少内存,这是开发人员必须考虑的每行代码(在编码时借助CLR的内置内存管理)适当地)。
public
是一个访问修饰符。 所以只要它被应用,它就是指范围。
static Foo
不公开,这意味着它在课堂外是不可见的。