C#(或Java)开发中静态方法调用非静态方法

背景

在一个项目开发中,我和其他公司的开发人员负责分别两个不同模块的开发,这里产生了一个需求,他需要调用我这边类(Class1)中的方法,我就说:“你直接new出来Class1调用不就行了?”,他回答我:“不行呀!我new你的类和我要调用的不在同一个类中”。哦吼,就是他那边有A和B两个窗口,他在A窗口中new了Class1,然后想在B窗口中调用。知道了他想干什么那就好办了。

思路

三种解决方法:

  1. 全局变量 。因为博主不知道怎么使用,所以这里不介绍。

  2. 他的A窗口调用他的B窗口方法传个参数,参数值就是new出来的Class1。 他又说了:“不行呀,我这边不会通过A中没有触发的条件呀,而且B窗口是在A窗口之前创建的呀。” 所以这种方法也行不通。

  3. 那我写一个静态方法给你让你来调喽。他阴险的一笑:“好呀好呀 。

开工

因为在调用的静态方法(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开发的伙伴可以参考,想法最重要。

更多内容请点击【阅读原文】哦!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值