C#中字段和局部变量的问题

我先写两个类Test1和Test2,目的是想不通过new调用另一个类中的方法

 public class Test1
{
    public void Method1()
    {
        Console.WriteLine("343");
    }
}
public class Test2
{
    Test1 ts1;
    public void Say()
    {
        ts1.Method1();
    }
}

这样,我在Test2中只需要声明一下就可以在Say()中调用他的方法了(这是我不理解的,使用一个类中的方法就要new一个该类的对象才可以。但是这个写成字段了不用new也可以啊。不是说C#中必须要new了才能使用吗?)
如果在Test2中这样写,就会报错(使用了为赋值的局部变量“ts1”)
图片说明](https://img-ask.csdn.net/upload/201705/31/1496207496_321992.jpg)

 public class Test2
{
    public void Say()
    {
        Test1 ts1;
        ts1.Method1();
    }
}


只有这样,也是我一直以为的必须new

 public class Test2
{
    public void Say()
    {
        Test1 ts2 = new Test1();
        ts2.Method1();
    }
}

这样才不会报错。
搞不懂,字段属性和对象我发现我突然不懂了……希望有大虾解答 -_-

3个回答

类的字段属性,默认情况下自动赋值为null,可以通过外面进行设置;如果外部没有给它赋值,当执行到此处时也会报空指针异常的;
局部变量,如果不赋值,不会某人赋值null所以需要自己手动赋值。

如果不想使用new来实例化,可以把方法改为静态方法,加个static就行了。

如果照你写的这样通过编译了
你实例化Test2 ts2 = new Test2();
调用 ts2.say();
此时 say方法种ts1是未被实例化的 就会出错
如果调用一个类的非静态方法 必须实例化这个类

你可以携程静态方法 加个static 直接用 类名.方法名 调用 就不用实例化了

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐