asp.net C#类类型代码

类型是由字段数据(成员变量)和操作字段数据的成员(属性、方法、构造函数、事件等)所构成的自定义类型。其中字段数据表示类实例(对象)的状态。

在c#中,类使用class关键字定义,例如:


public class car
{
//car的字段(状态)
private int _speed;
private string _name;
//car操作字段的属性
public int speed
{
set {this._speed=value;}
get{return this._speed;}
}
public string name
{
set { this._name=value;}
get{return this._name;}
}
//显式定义默认构造函数
public car(){}
//自定义构造函数
public car(string name,int speed)
{
this._name=name;
this._speed=speed;
}
//car的功能(方法)
public void showstate()
{console.writeline("car {0} is going {1} mph", this._name,this. _speed);}
}

另:类的字段很少被定义为公开的,为了保护状态数据的完整性,最好把字段数据定义为私有(或者受保护的),然后通过属性对外提供受控制的访问。

使用new关键字来分配对象

对象必须使用了new关键字来分配到内存,如果不是用new,而随后尝试使用类变量的话,会收到一个编译错误。


public static void main(string[] args)
{
//错误,忘记使用new
car c;
c.name="bruce";
}

正确的例子:


public static void main(string[] args)
{
//创建car对象。
car c;//声明了指向尚未创建的car对象的引用。
c=new car("bruce wong",150);//通过new把有效的引用赋给对象,这引用才会指向内存有效的对象。
c.showstate();
console.readkey(true);
}



类构造函数

作用:给对象的字段(状态)赋值,它允许在创建对象时创建其状态。

构造函数是类特殊的方法,在使用new关键字创建对象时被间接调用。

注意:构造函数没有返回值(即使是void),它的名字总是和类的名字一样。

默认构造函数

c#提供一个默认的构造函数,需要时你可以重新定义,默认构造函数不接受任何参数。它把新的对象分配到内存和确保所有的字段都被设置为正确的默认值。当你对这些默认值不满意,你可以重新定义默认构造函数。如:


public car()
{
this._name="my car";
this._speed=100;
}

那么每次使用new car()都会创建状态_name="my car" _speed=100的car对象。

自定义构造函数

作用:在创建对象时可以直接初始化对象的状态。


public car(string name,int speed)
{
this._name=name;
this._speed=speed;
}

注意:一旦定义了自定义函数,自带的默认构造函数就自动从类移除(不能用默认构造函数创建对象了)。如果希望使用默认构造函数创建类对象,就必须显式定义默认构造函数。

this关键字的作用

一、提供对当前实例的访问。

可以解决传入参数的名字与类型字段名字相同时产生的作用域歧义。例如:


class car
{
private string name;
public void setname(string name)
{ this.name=name;}
}

表示把参数name的值赋给本对象(实例)的字段name,this表示本实例。

二、参数传递。使用this进行串联构造函数调用

使用一项名为构造函数链的技术来设计类。当类定义个了多个构造函数时,这个设计模式就会很有用。

由于构造函数通常会检验传入的参数来强制各种业务规则,所以在类的构造函数集合中经常会找到冗余的验证逻辑。


class car
{
public int speed{get;set;}
public string name{get;set;}
public car(){}
public car(int speed)
{
if(speed>150)
{speed=150;}
this.speed=speed;
}
public car(string name)
{
this.name=name;
}
public car(int speed,string name)
{
if(speed>150)
{speed=150;}
this.speed=speed;
this.name=name;
}
}

串联构造函数方案:让一个接受最多参数个数的构造函数做“主构造函数”,并实现必须的验证逻辑。其余的构造函数使用this关键字把参数转给主构造函数,并提供其他必需的参数。这样,我们只关心主构造函数的逻辑,而其他构造函数体基本是空的了。


class car
{
public int speed{get;set;}
public string name{get;set;}
public car(){}
public car(int speed):this(speed,""){}
public car(string name):this(0,name){}

// 主构造函数
public car(int speed,string name)
{
if(speed>150) {speed=150;}
this.speed=speed;
this.name=name;
}
}

使用this关键字串联构造函数方式可以简化编程任务,类定义更加容易维护、更更加简明。但它不是强制使用的。

串联构造函数的执行顺序:

1、调用构造函数把调用者提供的参数值转发给主构造函数,并提供其他必须的初始化参数值。

2、执行主构造函数。

3、执行调用构造函数体的逻辑。

三、自定义索引器


class carcollection:ienumerable
{
private arraylist arcar=new arraylist();
public car this[int index]
{
get{ return (car)arcar[index];}
set{arcar.insert(index,value);}
}
//...
}

static关键字

    c#类(或者结构)可以使用static关键字来定义许多静态成员。这些静态成员只能从类级别而不能从对象级别上调用(调用静态成员时不需要创建实例对象)。

例如:

 


//错误,writeline是静态成员,是类级别的方法。
console c=new console();
c.writeline("bruce wong");

//正确!writeline是类级别的方法
console.writeline("bruce wong");

注意:

一、静态成员只能操作静态数据或调用类的静态成员。而非静态成员可以操作实例数据与静态数据(成员),因为静态成员对类的所有实例都是可用的。

二、clr把静态数据分配到内存只进行一次,改变静态数据将影响此类的所有实例。

定义静态构造函数

    构造函数用于在创建类对象时设置类对象的数据值。如果使用实例级别的构造函数给静态数据赋值,你会惊奇的发现每次新建类对象时静态数据的只都会被重置。所以我们要初始化静态数据最好使用静态构造函数。

    静态构造函数是特殊的构造函数,它非常适用于初始化在编译时未知的静态数据的值:

一、一个类(结构)只能定义一个静态构造函数。

二、静态构造函数不允许访问修饰符并且不能接受任何参数。

三、无论创建多少个类实例,静态函数知执行一次。

四、clr创建类实例或首次调用类静态成员前,clr会调用静态构造函数。

五、静态构造函数先于实例级别的其他构造函数执行。

静态类:一个类被定义为静态的(使用static关键字修饰),就不能使用new关键字来创建类实例,静态类只能包含用static标记的静态类成员或字段。

ps教程:项目的应用程序对象(如定义main()方法的类)通常定义为静态类,以此来确保只包含静态成员且不能被直接创建。如:

 


static class program
{
static void main(string[] args)
{
//...
}
}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索string
, 数据
, 对象
, 实例
, 函数
this
,以便于您获取更多的相关知识。

时间: 2024-09-11 04:15:57

asp.net C#类类型代码的相关文章

asp.net cookie类程序代码

 代码如下 复制代码 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.IO; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Binary; using System.Web.Security; using System.Web.UI;

Asp.Net类型转换类(通用类)代码分享_实用技巧

废话不多说了,直接给大家贴代码了,具体代码如下所述: /// <summary> /// 类型转换类 /// 处理数据库获取字段为空的情况 /// </summary> public static class DBConvert { #region------------------ToInt32类型转换------------------ /// <summary> /// 读取数据库中字符串并转换成Int32 /// 为空时返回0 /// </summary&

asp.net mvc 修改模型实体类的代码问题

问题描述 asp.net mvc 修改模型实体类的代码问题 修改类的字段的属性等后就会出错,DBContext更改,我网上搜索了Code First的方法,但是我是多个类都修改了,每个类都对应一个Context,请问应该要怎么改? 解决方案 干嘛每个实体类对应一个context,这不是自找麻烦么?如果非要这样,当然要分别修改了.

发一个ASP的ADODB类代码_ASP CLASS类

反正我现在用这个做了很多站,自己觉得还是满有用的,所以拿出来和大家分享一下.支持三种数据库连接:MSSQL2000,MSSQL2005,ACCESS 三种方法: select_table(sql) 表查询,返回TRUE或FALSE 当SQL语句出错,或空记录时返回FALSE,否则TRUE update_table(SQL) 表更新,包括update,delete 成功执行返回TRUE,否则返回FALSE,updated为执行后影响记录行数. insert_table(sql,table,id_c

asp fso type属性取得文件类型代码

asp fso type属性取得文件类型代码是用来返回类型指定的文件或文件夹. 语法 FileObject.Type FolderObject.Type   实例File对象 <% dim fs,f set fs=Server.CreateObject("Scripting.FileSystemObject") set f=fs.GetFile("c:test.txt") Response.Write("The file test.txt is of

ASP实例代码:asp操作Excel类

asp操作Excel类: <%'*******************************************************************'使用说明'Dim a'Set a=new CreateExcel'a.SavePath="x" '保存路径'a.SheetName="工作簿名称"       '多个工作表 a.SheetName=array("工作簿名称一","工作簿名称二")'a.Sh

ASP 通用模板类

模板 ASP 通用模板类. 适合存在较少循环的模板.未实现内部循环,需要使用正则表达式,较浪费资源和时间,如需使用可参考这篇文章. 特性可设定私有缓存或公共缓存,提高效率可自由选择使用 Stream 组件或 FSO 组件支持自定义文件编码可保存文件 属性 Name文本,该模板名称,主要用于使用公共缓存时区分不同模板. Format文本,文件编码类型,可设置值. Object文本,使用组件,可设置值: StreamFSO PublicCache布尔值,使用公共缓存,开启时模板文件将保存到Appli

ASP的数据库类

数据|数据库 ASP的数据库类 一.前言 提到ASP操作数据库,大多数人会想到:共用的连接字串ConStr.Conn.Open ConStr建立数据库连接.Conn.Execute SqlCmd方式执行命令.RecordSet.Open Sql,Conn,1,1取得记录集,的确这种方法被99%的人或公司采用.对于操作数据库过程中产生的错误,恐怕99%的人不会进行处理,要么在程序的开头加入on error resume next"轻松"跳过去.要么让错误信息连同错误代码一同"暴

ASP中使用类实现模块化

写在前面的话: 所有写程序的人都知道,当你逐渐对您要实现的功能展开的时候,很大的时候,第一天写的东西第二天就忘了写到那里了,很多的时候,不得不写上详细的程序开发笔记,这在ASP的系统开发中感觉尤其文件.函数复杂的时候,当我们打算对网站的一部分功能进行修改的时候,感觉无从下手或者感觉要修改的地方.这时候,如果您学过任何一门面向对象的编程的语言的话,自然想到怎么能把代码功能实现模块话,asp本质上不是面向对象的编程,但VBSCRPIT6.0提供了类,我们可以通过类实现代码的封装,实现模块话. 首先,