首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

请教怎么理解这些基础有关问题

2012-05-28 
请问如何理解这些基础问题请先看代码:C# codeusing System.Datausing System.Drawingusing System.Windo

请问如何理解这些基础问题
请先看代码:

C# code
using System.Data;using System.Drawing;using System.Windows.Forms;namespace BinHuoAsst{    public partial class FmMain : Form    {        //方法外除了可以申明变量,还可以顺便开new        Button btn = new Button();        DataTable dt = new DataTable();        DataGridView dgv = new DataGridView();        //btn.Name = "asdf";方法外无法写这样的语句        public FmMain()   //在方法内可以进行的操作:        {            InitializeComponent();            this.Controls.Add(btn);            //控件的添加            btn.Location = new Point(10, 10);  //new对象            this.Controls.Add(dgv);            dgv.Location = new Point(90, 10);            btn.ResetText();                   //调用对象的方法            btn.Text = "Test";                 //访问和设置对象的属性            dt.Columns.AddRange(new DataColumn[] { new DataColumn(), new DataColumn() });            dt.Rows.Add("A", "C");            dt.Rows.Add("B", "A");            dgv.DataSource = dt;               //绑定数据源            int v1 = (int)A.a;                 //使用类中的枚举            int v2 = (int)BinHuoAsst.A.m;      //使用类外但在命名空间内的枚举            //int v3 = A.x;                    //无法使用无命名空间的同名枚举            int v4 = (int)B.x;                 //可以使用无命名空间的枚举,但不能与现有内层枚举同名        }        enum A { a, b, c };                    //属于类的枚举    }    enum A { l, m, n };                        //与类平级的枚举}enum A { x, y, z };                            //不处于任何命名空间的枚举,与内层枚举同名enum B { x, y, z };                            //不处于任何命名空间的枚举,不与内层枚举同名


基础问题:
 
1、如何理解方法外可以new,我所知的new是为对象分配内存空间,那么,在方法内的new,我理解是调用该方法时分配,但在方法外的new,分配的时机是何时?是Main()方法中Application.Run(new FmMain())时开始分配吗?如果是,那么new FmMain()执行的是类FmMain的构造函数,可本例中,这些new不在构造函数里啊?
 
2、枚举相关。分别可以在类中、类外但命名空间内、命名空间外定义枚举(结构体也如此),前两种的定义和使用都好理解,但后一种(即不处于任何命名空间)就超出我的理解了,上述代码可以正常编译,说明C#并没有限定任何东东都应该处在命名空间内,但这样的话,当这样的枚举与内层枚举同名时(例如A),如何使用它?同样,枚举B在其它项目又该如何使用?如果用不了,为什么C#还允许这样来定义?


[解决办法]
第一个问题,在主要位置下断点跟踪一下就知道了,类外的对象实例化是先于该类的构造函数的,就好比你的例子里面btn的构造函数要在FmMain之前执行

至于命名空间
http://msdn.microsoft.com/zh-cn/library/dfb3cx8s(v=vs.80).aspx
看这个吧

热点排行