2017-04-17 62 views
-1

我是C#和OOP的初学者。是否有任何一种异常来总结C#中函数的两个变量?

在这里,我总结了两个来自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(); 
     } 
    } 
} 

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

价值OBJ:3.

一个= 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(); 
     } 
    } 
} 

和输出,以及,一个

价值OBJ:3.

一个= 3

B = 3

总和:3

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

回答

8

的问题是不是你的东西总结 - 这是你打印方式:

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

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

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

有关字符串的更多信息格式化阅读: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()}."); 

如果你想了解更多关于字符串插值的知识,请看看这个:https://msdn.microsoft.com/en-us/library/dn961160.aspx

+0

yaww打折这一点无论因为C#6的一部分,更高的...这是我的愚蠢的错误永远! @ _ @ @ @ @ @ @ –

+0

@ShahShishir - 仅供参考,C#约定用于以大写字母开头的方法名称。 – xr280xr

+0

字符串插值如何在这里工作? 你能给一些参考吗? :) –

2

现在不也

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

+0

确实感谢:) – mvermef

相关问题