如果我在C#中创建一个静态类,那么内部的任何方法都会被视为静态的吗,不管它们是否';重新显式声明为静态?
可能重复:如果我在C#中创建一个静态类,那么内部的任何方法都会被视为静态的吗,不管它们是否';重新显式声明为静态?,c#,static,static-methods,C#,Static,Static Methods,可能重复: 我得到了一个有趣的错误,当我从一个静态声明的类中调用一个方法(我没有显式声明为静态)时,我得到一条消息说 非静态字段、方法或属性“MangoTree.Twitter.OAuthClient.PerformRequest(System.Collections.Generic.Dictionary,string,string,MangoTree.Twitter.OAuthClient.RequestType)”需要对象引用 当我显式地将方法声明为static时,错误就会消失,我可以从类
我得到了一个有趣的错误,当我从一个静态声明的类中调用一个方法(我没有显式声明为静态)时,我得到一条消息说 非静态字段、方法或属性“MangoTree.Twitter.OAuthClient.PerformRequest(System.Collections.Generic.Dictionary,string,string,MangoTree.Twitter.OAuthClient.RequestType)”需要对象引用
当我显式地将方法声明为static时,错误就会消失,我可以从类声明中删除static修饰符,错误就会消失。让我困惑的是,我当时的印象是,当我将类声明为静态时,类中的所有内容都应该自动也是静态的,而不必显式声明。如果在C#中创建静态类,中的方法需要声明为静态: 例如:
static class CompanyInfo
{
public static string GetCompanyName() { return "CompanyName"; }
public static string GetCompanyAddress() { return "CompanyAddress"; }
//...
}
静态类的所有成员都必须是静态的 请阅读本文了解原因
如果不创建类的实例,就不能调用非静态成员函数。因此,在第一种情况下,由于无法实例化静态类,因此在尝试从静态函数调用非静态函数时会出现错误 但是,如果您的类是非静态的,并且有两个方法,其中一个是静态的,那么您可以像下面这样在静态函数中调用非静态成员函数
public class Foo
{
public void Test()
{
}
public static void Test1()
{
Foo foo = new Foo();
foo.Test1();
}
}
因为静态成员和类在实例化普通类之前就已经实例化了,所以静态函数不会知道普通函数的存在
在第二种情况下,由于两个函数都声明为静态,因此没有问题
让我困惑的是,我的印象是,当我将类声明为静态时,类中的所有内容都应该自动也是静态的
静态类的所有成员实际上都必须是静态的,但这并不是自动发生的:您必须显式地将所有成员声明为静态的。声明类静态的目的是让编译器检查所有成员是否都是静态的,并防止任何创建静态类实例的尝试。C#编译器将静态类标记为“密封抽象”,因为您永远无法实例化静态类或从静态类继承。因此,在静态类中定义非静态成员没有实际价值,因为您永远无法实例化该类,因此永远无法调用非静态成员。因此,您必须在静态类中只定义静态成员。一个类是否应该是静态的是设计决定。复制了Eric的一个伟大答案。。。。