前言:
此刻看官们对“静态方法中可以使用静态变量吗对吗”大概比较重视,各位老铁们都需要知道一些“静态方法中可以使用静态变量吗对吗”的相关内容。那么小编也在网络上网罗了一些对于“静态方法中可以使用静态变量吗对吗””的相关内容,希望你们能喜欢,大家一起来学习一下吧!背景
在一个项目开发中,我和其他公司的开发人员负责分别两个不同模块的开发,这里产生了一个需求,他需要调用我这边类(Class1)中的方法,我就说:“你直接new出来Class1调用不就行了?”,他回答我:“不行呀!我new你的类和我要调用的不在同一个类中”。哦吼,就是他那边有A和B两个窗口,他在A窗口中new了Class1,然后想在B窗口中调用。直到了他想干什么那就好办了。
思路
三种解决方法:
全局变量 。因为博主不知道怎么使用,所以这里不介绍。他的A窗口调用他的B窗口方法传个参数,参数值就是new出来的Class1。 他又说了:“不行呀,我这边不会通过A中没有触发的条件呀,而且B窗口是在A窗口之前创建的呀。” 所以这种方法也行不通。那我写一个静态方法给你让你来调喽。他阴险的一笑:“好呀好呀 ”。开工
因为在调用的静态方法(method1)中,需要使用好几个类Class1中的全局变量,我想:“我靠,我不能把这些变量都写成静态变量吧”。看来要另想办法,忽然灵机一动:“把Class1作为全局静态变量,在Class1的构造函数中初始化为this不就行了,机智如我。 ”
具体代码Class1代码
public class Class1 { //用到的全局变量 private string attribute1; private string attribute2; private string attribute3; private string attribute4; private string attribute5; //静态Class1 private static Class1 staticThis; //构造函数中初始化staticThis public Class1() { staticThis = this; } //静态方法中调用Class1中的全局变量 public static string method1(int i) { //这里需要判断一下这个类是否被new出来了 if(staticThis != null) { if(i == 1) { return staticThis.attribute1; } else if(i == 2) { return staticThis.attribute2; } else if (i == 3) { return staticThis.attribute3; } else if (i == 4) { return staticThis.attribute4; } else if (i == 5) { return staticThis.attribute5; } } return null; } }Class2代码
class Class2 { public Class2() { //在Class2中new出来Class1 Class1 class1 = new Class1(); } }Class3代码
class Class3 { public Class3() { //Class3中调用 Class1.method1(1); } }总结
这样的话对于Class1就可以在Class3中调用静态方法啦,不过在调用之前一定要new出来(随便在哪里new出来都行)。因为C#和Java代码基本相同,所以Java开发的伙伴可以参考,想法最重要。
标签: #静态方法中可以使用静态变量吗对吗