我有一些关于C#方法范围的相关问题,以及ASP.Net中的最佳用例:
public static
方法public
方法static
方法method scope
类型的内存占用情况下会产生什么差异,例如,static
将在使用后释放函数内存?< / LI>
醇>
答案 0 :(得分:11)
public
本身意味着这是一个基于实例的成员,外部调用者(可以访问该类型的访问者)可以访问它。
static
本身意味着该成员不是基于实例的:您可以在不需要任何特定实例(甚至任何实例)的情况下调用它;如果没有可访问性限定符,则假定为非公共 - 因此外部调用者无法访问该成员。
public static
是一种static
方法, 可供外部呼叫者访问。
在两种情况下内存使用都是相同的:方法中声明的任何变量都限定在方法调用本身(作为实现细节:通过堆栈;还有:我假设没有“捕获变量”,并且没有{ {1}}或async
用法),
这一点中没有任何内容特定于ASP.NET / MVC。但是,控制器上的“动作”方法是IIRC,预计是公共/实例,所以 yield
修饰符,而没有 {{1} }修饰符。
基本上:
辅助功能:
静态/ etc:
public
)和static
成员this.
成员答案 1 :(得分: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
答案 2 :(得分:3)
默认情况下,类成员是私有的,因此如果您未指定静态方法是plublic,则无法从类外部访问您的方法。
有关访问修饰符的更多信息,请参阅: Access Modifiers (C# Programming Guide)
答案 3 :(得分:2)
为人们提供示例非常好,但是这些内容已在互联网上得到很好的记录,并且非常简单的搜索可以产生明确的结果。让我放纵一下,找到关于主题的MSDN参考资料(顺便提一下,两个主题,成员访问和非实例成员并不严格相关):
首先,您有access modifiers,在这种情况下具体为public
:
公开
可以通过其中的任何其他代码访问类型或成员 相同的装配或引用它的另一个装配。
会员是否static
,这是不相关的。
然后你有static, non-instance stuff:
<强>静态强>
静态类和类成员用于创建数据和函数 无需创建类的实例即可访问。静态的 类成员可用于分隔数据和行为 独立于任何对象标识
因此,任何差异都是可能的访问和“实例”规则的组合。
内存管理是另一回事;没有任何方法,属性,字段,无论访问和上下文,都会神奇地减少内存,这是开发人员必须考虑的每行代码(在编码时借助CLR的内置内存管理)适当地)。
答案 4 :(得分:0)
public
是一个访问修饰符。所以只要它被应用,它就是指范围。
答案 5 :(得分:-1)
static Foo
不公开,这意味着它在课堂外不可见。