.
img
注册时间:--
  • 纯文字版本
    开 关闭
  • 消息
  • 收藏
  • 退出
注意:文章中$$符号只有一个,因程序问题提交后变成了两个。

走进asp.ner第七课

类,是面向对象编程的根本所在,类用关键字class来声明,它还可以有一些修饰符,例如public。如果声明为public,那么这个类就可以在程序的外部使用属于它的成员。现在在网站的根目录下新建一个目录,命名为App_Code,注意不要写错了,这个目录的名称是唯一的,它通常用来放一些全局的C#程序,把下面的代码保存为myvar.cs放在新建的App_Code目录下。
using System;
namespace MYVAR
{
public class MyVar
{
public static string a=“这是类MyVar声明的变量a“;
public string b=“这是类MyVar声明的变量b“;
}
}
现在新建一个aspx文件和cs文件。aspx文件要有一个输出变量的代码,cs文件如下:
using System;
using System.Web;
using System.Web.UI;
partial class wap:Page
{
protected string txt;
void Page_Load()
{
txt=MYVAR.MyVar.a;
}
}
如果你调试成功了的话,不难发现页面输出的是我们在第一个文件声明的变量a的值。代码中MYVAR.MyVar.a正是调用了上面的myvar.cs中的变量a。访问一个外部类的静态变量方法:

命名空间.类.静态变量名

现在新加了不少概念,在myvar.cs中,namespace MYVAR{}正是声明了一个叫做MYVAR的命名空间,声明命名空间用关键词namespace,它不能带类似public的访问修饰符,因为命名空间总是公共的。命名空间的作用是避免成员的命名冲突,以便组织庞大的应用程序。你可以把它理解为C#文件的外壳,正如很多城市都有个人民大道,我们要在前面加上城市的名称区别它们一样。现在,我来告诉你,程序开头的using语句正是用来引入这些命名空间,以避免过于冗长的名称。如上例我们可以改为:
using System;
using MYVAR;
using System.Web;
using System.Web.UI;
partial class wap:Page
{
protected string txt;
void Page_Load()
{
txt=MyVar.a; //直接访问类的静态成员
}
}
“//”是C#里的注释,在回车符之前,程序不会处理它后面的内容。相信你已经注意到了,第二行加入了using MYVAR;这句,而MYVAR.MyVar.a我们就可以不用写命名空间了。其实System和System.Web.UI等都是.net里的命名空间,它们提供了很多实用的类库供我们直接使用,Page类正是属于System.Web.UI命名空间。你不要给命名空间里的.号搞懵,它们之间是嵌套关系,在这里你只要知道它们是不同的命名空间就可以了。C#程序的基本单元是类,也就是说,namespace声明是可选的。
在MYVAR命名空间中,声明了一个公共类MyVar。而里面的第一个字符串变量a我们又加了个static修饰符,带有static修饰符的成员,都是静态成员,静态成员从程序开始到结束,它会一直驻留在内存中,使用静态成员非常方便。
没有static修饰符的成员(如变量b),都叫做实例成员,实例成员在一个类开始创建实例,到这个类的实例不再被使用,就是它的生命周期。也就是它的生命周期比静态成员短得多,什么是创建实例?
void Page_Load()
{
MyVar v=new MyVar();
txt=v.b;
}
这里注意一下,如果你没有using MYVAR命名空间,那么就要写为:
void Page_Load()
{
MYVAR.MyVar v=new MYVAR.MyVar();
txt=v.b;
}
现在,我想你已经知道了using指示符的作用,它不但可以引入.net为我们提供的命名空间,也可以引入我们自定义的命名空间。好,代码中MyVar v=new MyVar();这句我们叫做创建类MyVar的实例,一旦我们用new运算符创建了类的实例,系统就会为这个实例开始分配内存。我们就可以用这个实例去访问类的实例成员了,如:txt=v.b;里的v就是类MyVar的一个实例。你现在一定很晕了,我提醒一下你,一个类中,没有带static的成员就是实例成员,明白了吗?
类的成员有很多,属于类的变量,叫做“域”,这是黑话,你知道是变量就行了。也许你对MyVar v=new MyVar();这样的语句一知半解,其实MyVar()是类MyVar的成员:构造函数。构造函数具有与类相同的名称。
public class MyVar
{
public string b;
MyVar()
{
this.b=“这是类MyVar声明的变量b“;
}
}
这里我们用this访问符在类MyVar的构造函数中初始化b这个域,也就是你new MyVar()的时候,系统才给域b赋值。this访问符专用来访问类的域,它只能访问它所属类的实例变量。
构造函数可以重载,现在把myvar.cs的class部分修改为:
public class MyVar
{
public string b;
MyVar()
{
this.b=“你实例化时不带参数“;
}
MyVar(string x)
{
this.b=x;
}
}

现在,你在aspx页的Page_Load中这样实例化它

void Page_Load()
{
MyVar v=new MyVar();
txt=v.b;
}
而在,再把代码改为:
void Page_Load()
{
string str=“我在实例化时有参数“;
MyVar v=new MyVar(str); //这里的()内只能是string型,对应MyVar(string x)里的参数变量
txt=v.b;
}
两次运行,不难发现显示的内容并不一样,如果你实例化时带有一个string型的参数,那么类MyVar调用MyVar(str)构造函数,在MyVar(str)中,我们给类MyVar的第二个构造函数传递了一个string的值。如果给的是int的参数,编译器就会报错。构造函数是可选的,如果你不在类中显式地指定构造函数,那么系统会提供一个缺省的构造函数,它什么都不做。也就是说,无论你是否在类中写构造函数,都可以进行无参数的实例化操作,如:
MyVar v=new MyVar();
构造函数中,我们还可以带有多个参数,它们用,号分开
public class MyVar
{
public string b;
MyVar(string x,object obj)
{
this.b=x;
this.b+=“<br/>对象参数:“;
this.b+=obj.ToString();
}
}
这时你就可以这样实例化MyVar()
MyVar v=new MyVar(“hello?“,12345);
object类型可以接受任何类型的数据,你可以在第二个参数中使用任何数据类型。我说过,类也是一种数据类型,以后,你可能会见到如下这类代码:
static void Swap(string x,MyVar y)
{
//函数体
}
参数y正是用我们的类来声明,我不是也说过吗?在C#里,一切皆为对象。你无妨把string或者int看成是.net里的一个类。
这节课的内容相当多,也比较复杂,你不能完全理解也不要紧,不过我希望你能将我讲到的例子运行一下,如果代码运行有错误,请在qq上给我留言。
类是C#里十分重要的概念,即使你对本课的内容一知半解,也务必尽量地去理解我说过的一些概念词。如果你看完了我之前讲的所有课程,而实在没有收获的话,那你就没必要再看下去,我也免去误人子弟的罪名。
本课程完全属本人编写,文章里谈到的,都是本人在学习的过程中领悟出来的知识,难免有所误会,以及跟微软官方有很大的出入。
不过这是我一向的做法,当然,在我的课程中,你也必须有属于自己的看法以及理论,迷信权威,迷信教材,都将会走很多弯路。
good 24

发表评论

文明评论,重在参与

暂无评论!
雷军主讲北京车展发布会!SU7 04-24
互联网汽车是什么?有什么优势呢 04-20
从“中国制造”走向“中国智造” 04-20
中国接入互联网30周年,马化腾 04-20
中国互联网30周年发展座谈会在 04-20
用著作权法来保护软件是否真的有 07-28
杀毒软件:只在搞娱乐,从未杀过 07-28
小谈高通反垄断 07-28
印度将推出百元智能机 山寨厂商 07-28
高通垄断之痛:不是国产手机大而 07-28
一张图读懂阿里巴巴眼花缭乱资本 07-28
滴滴打车副总裁张晶离职 高层换 07-28
返回Net教程-返回首页
AD