从C#中的函数中总结两个变量是否有任何异常?

Sha*_*hir -1 c# static-variables

我是C#的初学者,也是OOP的初学者.

在C#中总结来自外部函数的两个静态变量时,我感觉很有趣.

这是我的代码.

using System;

namespace StaticFun
{
    class StaticFun
    {
        public static int a;
        public static int b;

        public void count()
        {
            a++;
        }

        public void mount()
        {
            b++;
        }

        public static int getsum()
        {
            return a + b;
        }
    }

    class Program
    {
        static void Main(String[] args)
        {
            StaticFun obj = new StaticFun();

            obj.count();
            obj.count();
            obj.count();
            Console.WriteLine("Value of a for obj : {0}.", StaticFun.a);

            obj.mount();
            obj.mount();
            Console.WriteLine("\na = {0}\nb = {0}\nSum : {0}.", StaticFun.a, StaticFun.b, StaticFun.getsum());

            Console.ReadKey();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

当我编译这个程序时,我得到如下的输出.

对象的价值:3.

a = 3

b = 3

总和:3

我可以从输出中了解前两个值.但对于b,它可能是2!不是吗?在类StaticFun中,我创建了一个函数public void mount()来将b的值递增1.由于b是一个静态变量,它的初始值是0.然后在调用该函数两次之后,它的值将是2.如何值为3,我无法理解这个事实.此外,总和可能是3 + 2 = 5,这是我的假设.但它也与变量a和b的值相同.

我认为这是因为他们的静态行为.但令人惊讶的是,它也为非静态变量提供了相同的输出!

这是我的第二个代码,

using System;

namespace StaticFun
{
    class StaticFun
    {
        public int a;
        public int b;

        public void count()
        {
            a++;
        }

        public void mount()
        {
            b++;
        }

        public int getsum()
        {
            return a + b;
        }
    }

    class Program
    {
        static void Main(String[] args)
        {
            StaticFun obj = new StaticFun();

            obj.count();
            obj.count();
            obj.count();
            Console.WriteLine("Value of a for obj : {0}.", obj.a);

            obj.mount();
            obj.mount();
            Console.WriteLine("\na = {0}\nb = {0}\nSum : {0}.", obj.a, obj.b, obj.getsum());

            Console.ReadKey();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

而且输出也是,

对象的价值:3.

a = 3

b = 3

总和:3

我完全误解了这个事实.有没有人让我的概念清楚地表明这些产出?

Met*_*lon 8

问题不在于你的总结 - 这是你打印它的方式:

Console.WriteLine("\na = {0}\nb = {0}\nSum : {0}.", StaticFun.a, StaticFun.b, StaticFun.getsum());
Run Code Online (Sandbox Code Playgroud)

您实际上连续三次打印相同的对象.你应该增加括号中的数字:

Console.WriteLine("\na = {0}\nb = {1}\nSum : {2}.", StaticFun.a, StaticFun.b, StaticFun.getsum());
Run Code Online (Sandbox Code Playgroud)

有关字符串格式的更多信息,请阅读:https://msdn.microsoft.com/de-de/library/system.string.format(v = vs.110).aspx

顺便说一句,我建议使用字符串插值 - 它的工作原理如下:

Console.WriteLine($"\na = {StaticFun.a}\nb = {StaticFun.b}\nSum : {StaticFun.getsum()}.");
Run Code Online (Sandbox Code Playgroud)

如果您想了解有关字符串插值的更多信息,请查看以下内容:https://msdn.microsoft.com/en-us/library/dn961160.aspx.