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
我完全误解了这个事实.有没有人让我的概念清楚地表明这些产出?
问题不在于你的总结 - 这是你打印它的方式:
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.