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