是否可以创建一个具有方法定义的类,该方法可以静态访问方法,也可以通过类的实例访问,而不必为方法或单独的参数集创建两个单独的名称将方法区分为两种不同的方法。
即
public class MyClass
{
public static int GetMyInt()
{
return 1;
}
}
...
MyClass classInst = new MyClass();
int i = MyClass.GetMyInt();
int x = classInst.GetMyInt();
这在C#中是否可行?如果是这样,怎么会这样?
答案 0 :(得分:2)
没有。方法是static
或不是。
我不是一个有效的用例,你想允许对一个类的实例调用static
方法。
答案 1 :(得分:2)
根据定义,静态(或类)方法与实例方法不同
只有在创建该类的实例时才能访问实例方法;
静态方法总是可以访问的,因为它不需要类实例化(假设它是公共的),至少总是可以在类本身中访问。但是,您应该知道,如果您有一个静态变量,那么对该变量所做的任何更改都将影响该类,并且在应用程序上使用该变量的任何地方都会产生影响。
例如
...
static int lastId;
public static int getLastId(){
return lastId++;
}
这是一种可以控制类上自动编号的方法,因为无论何时调用getLastId,lastId都会递增,并且对所有应用程序都有效。
修改的
示例代码说明了静态变量的情况。也就是说,您应该知道c#支持重载。你不能拥有的是一对具有相同名称标签和相同的参数集和类型的方法。
例如,这构建正常。
public static int getValue()
{
return 1;
}
public int getValue(int x)
{
return x * 1;
}
但这会引发错误:
public static int getValue(int z)
{
return 1;
}
public int getValue(int x)
{
return x * 1;
}
这是真的,无论是否有静态方法。这也会产生编译时错误:
public int getValue(int z)
{
return 1;
}
public int getValue(int x)
{
return x * 1;
}
即使这会给你一个错误:
public string getValue(int z)
{
return 1;
}
public int getValue(int x)
{
return x * 1;
}
所以,是的,您可能有一个静态方法,其实例方法的名称标签相同,但您可能没有相同的参数集和类型。
如果您希望静态实例方法具有相同的行为,那么为什么您真的需要intance方法?静态方法可以解决问题(考虑到你知道静态方法的后果及其含义)。
答案 2 :(得分:2)
我不认为你可以吃蛋糕也可以吃蛋糕。
静态(通过类调用的方法)和非静态(通过类的实例调用的方法)是硬币的两个相对侧。
因此,无论是静态的还是非静态的,都不是
答案 3 :(得分:0)
不。但你可以包装它。但必须给它一个新的签名。
public int getMyInt()
{
return GetMyInt();
}