还是构造函数的问题.....
不是说构造函数来初始化类里的变量吗?
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;
}
}