Code Bye

C#初学,直观跟C++区别蛮大的

自己新建了一个类,然后输入之后输出firstName没有值,单步调试显示firstName没传值怎么回事?

namespace _CM1
{
    class CM1
    {
        string firstName;
        string lastName;
        public void ReadFirstName()
        {
            firstName = Console.ReadLine();
        }
        public void OutFirstName()
        {
            Console.WriteLine("You name is: ",firstName);
        }
    }
    
}
namespace _CM1
{
    class Program
    {
        CM1 cm = new CM1();
        static void Main(string[] args)
        {
            Console.WriteLine("Please input your name:\n");
            (new Program()).cm.ReadFirstName();
            (new Program()).cm.OutFirstName();
        }
    }
}
5分

#1

你创建了两个Program,值在第一个Program.cm里
在任何语言里这样写都是没值的
5分

#2

(new Program()).cm.ReadFirstName();
            (new Program()).cm.OutFirstName();
你这是做什么,都新建类了,当然是没有值了。
cm.ReadFirstName();
cm.OutFirstName();
这样就好

#3

回复2楼:

这样Main是静态的,新建类里不是静态的报错啊

#5

上学的时候看了眼c#示例代码,找不到main我就默默退出了orz
20分

#6

把CM1 cm = new CM1();这个定义放到Main函数里面
你在静态函数之外定义了一个非静态的对象
当然不能直接调用

#7

回复6楼:

原来是这样,我还把新建类里的改成了静态也是可以的

#8

既然是静态函数,那么这个函数是与当前类的实例无关的
你引用了一个跟当前实例有关的对象,当然就不能对它直接操作

要么你在外面这样定义
static CM1 cm = new CM1();
也是可以的

#9

当然像你之前的改法
把外部类里的函数定义成静态的

那么在静态函数里调用其他静态函数,也是没有问题的

或者在实例函数里调用静态函数,都是没有问题的

但是在静态类里调用实例函数,它又区分不出你到底要调用的是哪个实例的对象,不就冲突了


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C#初学,直观跟C++区别蛮大的