日期:2014-05-18  浏览次数:20918 次

还是构造函数的问题.....
不是说构造函数来初始化类里的变量吗?

1 class Program
  {
  int v;
  public Program()
  {
  v = 0;
  }
  static void Main(string[] args)
  {
  Program p = new Program();
  Console.WriteLine(p.v);
  Console.Read();
  }
  }

////////////////////////////
2 class Program
  {
  int v = 0;
  // public Program()
  //{
  // v = 0;
  // }
  static void Main(string[] args)
  {
  Program p = new Program();
  Console.WriteLine(p.v);
  Console.Read();
  }
  }

调试出来是一样的啊 那何必要构造函数呢 我原来一直以为2的类会报错...==!

------解决方案--------------------
呵呵,如果V的数据是复杂的则无法满足你的需求。稍后我放个例子上来。
------解决方案--------------------
不提供构造函数是 系统会调用它默认的无参构造函数即使你没声明 系统也会为他创建.

在有些情况下 你可能不会实现知道变量具体的值 比如说:

我有一个类Login 这个类是客户登录时用来查找数据库中有没有这个用户的。

public class Login
{
private string _userID;
private string _password;

public Login(string _userID,string _password)
{
this._userID=_userID;
this._password=_password;
}
public bool selectUser()
{
//查找用户 找到返回TRUE;
}
}

你找查找的用户是通过客户键盘输入获得的,但是你不可能提前知道用户输入什么。在这个例子中,构造函数就是用来初始化
变量的。
创建一个类 第一个调用的就是构造函数。
所以构造函数是非常有用的。
------解决方案--------------------
1:对于你说的不用构造函数的情况确实是可以的。因为在你没有明确提供任何构造函数的情况下,编译器也能正常工作(尽管为了某些原因它隐匿的提供了无参默认构造函数)。

2:但是如果你想在构造对象时提供一些灵活性,构造出复杂的、状态各异的对象,那么就需要执行一系列的准备工作,保持各个成员之间数据关系合理。使用这种初始化方式是不能完全满足你的需求的。
------解决方案--------------------
其实讨论两种方式的对错是没有意义的,最主要的是弄清楚构造函数的作用,也就是说构造函数是做什么用的.
------解决方案--------------------
极端一点,假如你这样写。
C# code
   
class Program
    {
        int v=0;
        public Program()
        {
            v = 0;
        }

    }