选择显示字体大小

asp.net高级教程(三)-对象

前面讲到如何构造bbs对象,有朋友要求我简单介绍一下c#里如何构造对象,下面我就简单说一下,算是补上这一课吧。

c#里的类(class),也可以叫做对象(object),它由以下几部分组成:成员变量,属性和方法,其中必不可少的是这个类不带任何参数的构造函数,它不指定返回类型,作用是初始化类的成员变量、分配内存等。和c++不同,c#类只有构造函数,不需要析购函数,也就是说你只需要为成员变量分配内存,而不必要显式的释放内存,这是因为c#java一样都是通过垃圾收集器来释放内存。明白这些,我们就可以构造一个最简单的类,一个什么也不做的类:

public class myclass
{
public myclass(){} ;
}

要使用时只需要简单的new一个出来就行了,象这样:myclass myclass1 = new myclass() ;不要怀疑,你的确已经创建了一个对象,尽管它什么也不做:)。下面我们给它加一个私有字符型成员变量m_strtitle,并且在构造函数里初始化这个成员变量,整个类的定义就变成这样:
public class myclass
{
//私有成员变量
private string m_strtitle ;

//构造函数
public myclass()
{
m_strtitle = "我已经被赋初值了" ;
}

}

注意定义成员变量的这行代码:private string m_strtitle ; 其中string好理解,说明m_strtitle是string类型的,那么最前面的private是什么作用呢?这个private(私有)说明这个成员变量是私有的,只有这个类内部的函数可以使用,而其他任何地方包括子类的函数都不能使用它,除了private,你还可以定义成public(公共)和protected(保护),public表明这个成员变量在任何地方都可以使用,而protected表明这个变量只能在本类或子类中使用。所以,如果我们想要使用这个成员变量,可以把它定义成public,但对于面向对象编程来说这不是个好的编程习惯,因为它破坏了类的封装性,在c++里好的方法是再定义公共函数来存取这个私有变量,而c#里提供了一个更加方便的方法,那就是属性(property),现在我们把这个属性title加上:
public class myclass
{
//私有成员变量
private string m_strtitle ;

//属性
public string title
{
get
{
return this.m_strtitle ;
}
set
{
this.m_strtitle = value ;
}
}
//构造函数
public myclass()
{
m_strtitle = "我已经被赋初值了" ;
}

}

让我们来看看如何定义属性,首先同样需要作用域限定符,通常我们使用public,表明任何地方都可以使用该属性,其次有两个关键字需要注意:this和value , this代表类本身,所以this.m_strtitle就是代表本类的成员变量m_strtitle , value代表当这个属性作为左值时等号右边的值,象这样:myclass.title = "hello" , 那么value的值就是"hello" , 好了,这个类已经可以使用了,象下面:

public static void main(string[] args)
{
myclass myclass = new myclass() ; //构造myclass类的一个实例
console.writeline(myclass.title) ; //结果是:我已经被赋初值了
myclass.title = "我的值改变了" ; //改变title属性的值
console.writeline(myclass.title) ; //这时结果变成:我的值改变了
}
好了,现在让我们给这个类加上一个mymethod方法,这个方法没有返回值,带一个字符型参数。
public class myclass
{
//私有成员变量
private string m_strtitle ;

//属性
public string title
{
get
{
return this.m_strtitle ;
}
set
{
this.m_strtitle = value ;
}
}

//构造函数
public myclass()
{
m_strtitle = "我已经被赋初值了" ;
}

//方法
public void mymethod(string a_str)
{
this.m_strtitle = a_str ;
}
}

这是我们可以改写一下刚才那个程序,运行结果同刚才一样:

public static void main(string[] args)
{
myclass myclass = new myclass() ; //构造myclass类的一个实例
console.writeline(myclass.title) ; //结果是:我已经被赋初值了
myclass.mymethod( "我的值改变了" ); //改变title属性的值
console.writeline(myclass.title) ; //这时结果变成:我的值改变了
}

以上简单讲了一下如何定义类,看完这些内容,可能你就可以理解上一节我们构造的那个bbs对象,让我们再看一下它的定义:

namespace myownclass
{
using system;
using system.data.sql ;
using system.data ;

////////////////////////////////////////////////////////////////////
//
// class name : bbs
//
// description: 论坛类,构造一个论坛对象
//
// date: 2000/02/03
//
/// ////////////////////////////////////////////////////////////////
public class bbs
{
//私有变量
private string m_strtitle ; //bbs名称
private int m_intforumcount ; //版面数
private int m_inttopiccount ; //贴子数
private int m_intusercount ; //注册用户数

//属性
public string title
{
get
{
return m_strtitle ;
}
}

public int forumcount
{
get
{
return m_intforumcount ;
}
}

public int topiccount
{
get
{
return m_inttopiccount ;
}
}

public int usercount
{
get
{
return m_intusercount ;
}
}

//构造函数
public bbs(string a_strtitle)
{
//
// todo: add constructor logic here
//
m_strtitle = a_strtitle ;

//读取数据库
myconnection myconn = new myconnection() ;
sqlcommand mycommand = new sqlcommand() ;
mycommand.activeconnection = myconn ;
mycommand.commandtext = "up_getbbsinfo" ; //调用存储过程
mycommand.commandtype = commandtype.storedprocedure ;

try
{
myconn.open() ;
sqldatareader myreader ;
mycommand.execute(out myreader) ;
if (myreader.read())
{
m_intforumcount = (int)myreader["forumcount"] ;
m_inttopiccount = (int)myreader["topiccount"] ;
m_intusercount = (int)myreader["usercount"] ;
}
else
{
throw(new exception("表或存储过程不存在")) ;
}

//清场
myreader.close();
myconn.close() ;
}
catch(sqlexception e)
{
throw(new exception("数据库出错:" + e.message)) ;
}

}
}
}

和刚才我们讲的稍有不同,首先看第一行namespace myownclass , 声明目前这个类的名字空间是myownclass,名字空间就像一个包,其中可以包含很多类。再看这行: using system; 这个告诉编译器,我要引用system名字空间里的对象。然后其他的就好理解了吧?

  


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons