我有几个关于C#中方法作用域的问题,以及在ASP.Net中的最佳使用方式:
- 在C#中,以下三种方法有何区别:
public static
方法public
方法static
方法
- 我正在使用MVC和Web服务;就我在问题#1中提到的方法作用域而言,每种
方法作用域
类型在内存占用方面将有何不同?例如,static
方法在使用后是否会释放函数内存?
我有几个关于C#中方法作用域的问题,以及在ASP.Net中的最佳使用方式:
public static
方法public
方法static
方法方法作用域
类型在内存占用方面将有何不同?例如,static
方法在使用后是否会释放函数内存?public
单独使用表示这是一个基于实例的成员,可供外部调用者(具有对类型本身的访问权限)访问。
static
单独使用表示该成员不是基于实例的:您可以在不需要任何特定实例(甚至根本不需要任何实例)的情况下调用它;如果没有可访问性限定符,则默认为非公共 - 因此,该成员将无法被外部调用方访问。
public static
是一个static
方法,可供外部调用者访问。
在这两种情况下,内存使用情况相同:在方法中声明的任何变量都限定于方法调用本身(作为实现细节:通过堆栈;另外:假定没有“捕获变量”、没有async
或yield
用法)。
这并不特定于ASP.NET / MVC。但是,控制器上的"action"方法预计应为公共/实例化,因此应该使用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
虽然人们提供给你示例很好,但这些东西已经在互联网上有了详细的文档,一个非常简单的搜索就可以得出明确的结果。让我来满足你,找到关于这些主题的MSDN参考资料(顺便说一下,成员访问和非实例成员并不严格相关):
首先,您有访问修饰符,特别是在这种情况下是public
:
public
该类型或成员可以被同一程序集或引用它的另一个程序集中的任何其他代码访问。
无论成员是否为static
,都是如此,这是无关紧要的。
然后,您有静态、非实例内容:
静态public
是一个访问修饰符。因此,无论应用在何处,它都涉及作用域。
static Foo
不是公共的,这意味着它在类外部不可见。