配色: 字号:
C#程序设计
2014-11-01 | 阅:  转:  |  分享 
  
云南爱因森软件职业学院继续教育学院网络技术系教师:张宗杰

1

C#程序设计

一、C#介绍

C#是微软公司发布的一种面向对象的、运行于.NETFramework之上的高级程序设计语言。

1995年,SUN公司正式推出了面向对象的开发语言Java,并提出了跨平台、跨语言的概

念后(writethecodeonceandrunitanywhere),Java就逐渐成为了企业级应用系统开发的首

选工具,而且使得越来越多的基于C/C++的应用开发人员转向了从事基于Java的应用开发。

Java的先进思想使其在软件开发领域大有山雨欲来风满楼之势。

很快,在众多研发人员的努力下,微软也推出了自己基于Java语言的编译器VisualJ++,

VisualJ++在最短的时间里由1.1版本升到了6.0版本。这决不仅仅是数字上的变化,集成在

VisualStudio6.0中的VisualJ++6.0的确有了质的变化,不但虚拟机(JVM)的运行速度大大

加快,而且增加了许多新特性,同时支持调用WindowsAPI,这些特性使得VisualJ++成为强

有力的Windows应用开发平台,并成为业界公认的优秀Java编译器。

不可否认,VisualJ++具有强大的开发功能,但其主要运用在Windows平台的系统开发中,

SUN公司认为VisualJ++违反了Java的许可协议,即违反了Java开发平台的中立性,因而,对

微软提出了诉讼,这使得微软处于极为被动的局面。

就在人们认为微软的局面不可能再有改观的时候,微软却另辟蹊径,决定推出其进军互

联网的的庞大计划——.NET计划,和该计划中旗帜性的开发语言——C#。

微软的.NET是一项非常庞大的计划,也是微软今后几年发展的战略核心,“在任何时间、

任何地点,采用相应的设备以获取所需的信息”的梦想并非一朝一夕能实现的。Visual

Studio.NET则是微软.NET的技术开发平台,其重要性可见一斑,而C#就集成在VisualStudio.NET

中。

需要提醒大家,脱离了.NET平台而单纯去讲C#是没有太大意义的,所以我们必须先了解

一些.NET平台开发的基础知识,才能更深入了解C#的特性。

.NET框架的核心是基于XML的跨平台跨语言的信息交换,基于此种平台将十分有助于我

们开发Internet分布式应用程序。

基于.NET的Web应用开发主要是使用ASP.NET,ASP.NET可以使用任何一种.NET支持的

语言编写,而其中C#可以提供脚本语言所无法提供的强大功能,使用C#编写ASP.NET的Web

应用程序在未来将成为Windows平台上Web开发的最佳选择。

了解了一些.NET平台开发的基础知识后,下面让我们再来结合.NET看看C#的一些绝技:

云南爱因森软件职业学院继续教育学院网络技术系教师:张宗杰

2

1、快速应用开发(RAD)功能

支持快速开发(Rapidapplicationdevelopment)可以说是目前开发语言最为重要的一大功

能,也正是C/C++的致命伤。网络时代应用系统的开发必须按照网络时代的速度来进行,支

持快速开发可以使得开发人员的开发效率倍增,从而使得他们可以从繁重的重复性劳动中解

放出来。

C#的RAD功能主要表现在例如垃圾收集、指代等众多特性上。垃圾收集机制将减轻开发

人员对内存的管理负担,而指代功能更是可以让开发者不经过内部类就调用函数。利用C#的

这些功能,可以使开发者通过较少的代码来实现更强大的应用程序,并且能够更好地避免错

误发生,从而缩短了应用系统的开发周期。

2、语言的自由性

用C#编写的程序能最大程度地和任何支持.NET的语言互相交换信息。能够继承和使用任

何语言所编写的程序可以称得上是知识的继承,这样做的好处是节省了大量的工作,你不必

把COBOL等语言强行改成另一种语言,.NET让各种语言真正地互相交流了。

C#和其他.NET语言有着最好的协作,这点对开发人员非常重要。全球从事编写软件的人

当中,大约有50%以VisualBasic作为基本的编程工具,在跨入.NET编程时代的时候,这些人

轻松地使用了.NET的VB开发Web上的应用程序,想想以后你可以和你的那些只懂VB的同

事真正在一起共同开发.NET的应用程序时,还有比这更让人轻松和高兴的事情吗?

3、强大的Web服务端组件

在C#的Web编程中,最让人兴奋的是Web服务端的组件,它们不仅包括传统组件,还

包括那些能够自动连接五花八门服务的可编程组件,你可以用C#编写自己的服务器端组件,

服务器端组件和标准的HTML提供的服务自然是不一样的,使用它们可以更自由、更容易地

进行数据绑定。不久,那些视频服务器组件也很快会出现,有了这些强大的组件,我们可以

设计出功能更加强劲的企业级分布式应用系统。

4、支持跨平台

随着互联网应用程序的应用越来越广,人们逐渐意识到由于网络系统错综复杂,使用的

硬件设备和软件系统各不相同,开发人员所设计的应用程序必须具有强大的跨平台性。C#编

写的应用程序就具有强大的跨平台性,这种跨平台性也包括了C#程序的客户端可以运行在不

同类型的客户端上,比如PDA、手机等非PC装置。

5、与XML的融合

云南爱因森软件职业学院继续教育学院网络技术系教师:张宗杰

3

由于XML技术真正融入到了.NET和C#之中,C#的编程变成了真正意义的网络编程,甚

至可以说.NET和C#是专为XML而设计,使用C#的程序员可以轻松用C#内含的类来使用XML

技术。就这方面而言,目前C#提供给了程序员更多的自由和更好的性能来使用XML。

6、对C++的继承

C#继承并保留了C++强大的功能,例如,C#保留了类型安全的检测和重载功能,C#还提

供了一些新功能取代了一些原来的ANSIC预处理程序的功能,提高了语言的类型安全等安全

性。

二、数据类型、表达式、变量

本节课将介绍c#语言的表达式,类型和变量。

C#定义变量的方法:数据类型变量名字

注意:定义的变量必须赋初值才能使用。

C#语言的简单类型包含布尔类型和三种数值类型:整型,浮点型和小数。

1、整数类型

类型占用的字节数范围

sbyte1-128~127

byte10~255

short2-32768~32767(也叫Int16)

ushort20~65535(也叫UInt16)

int4-2147483648~2147483648(也叫Int32)

uint40~4294967295(也叫UInt32)

long8-9223372036854775808~9223372036854775807(也叫Int64)

ulong80~18446744073709551615(也叫UInt64)



2、浮点数

类型精度

float7位(也叫Single)

double15~16位(也叫Double)



3、字符数据类型

云南爱因森软件职业学院继续教育学院网络技术系教师:张宗杰

4

char,一个字符变量在内存中占两个字节。

字符变量的定义形式如下:

charc1,c2;

可用下面语句对c1、c2赋值:

c1=’a’;

c2=’b’;



一些常用的C#字符操作方法





4、字符串

字符串是任何一个应用程序使用得最多的类型之一。字符串的值是由一对双引号括起来

的字符序列。

如:

strings1;//定义一个字符串变量s1

strings2="HelloWorld!";//定义一个字符串变量s2,并进行初始化



5、布尔类型

bool,值只有两个true和false。

如:

boolx=true;

booly=false;



云南爱因森软件职业学院继续教育学院网络技术系教师:张宗杰

5

三、顺序、选择、循环结构

1、顺序结构

按一定顺序解决问题、代码按顺序书写,程序按顺序执行,程序结构称为顺序结构。

如:(1)计算两个数的和。

步骤为:输入两个数,计算他们的和,输出他们的和。

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Text;



namespacecha1

{

classProgram

{

staticvoidMain(string[]args)

{

inta,b,sum;



Console.WriteLine("请输入数字,按回车输入下一个");



a=Convert.ToInt32(Console.ReadLine());//将输入的字符转换成数字



b=Convert.ToInt32(Console.ReadLine());//将输入的字符转换成数字



sum=a+b;



//将数字转换成字符输出,两种方法

Console.WriteLine("计算的结果为:{0}",sum.ToString());

//Console.WriteLine("计算的结果为:{0}",Convert.ToString(sum));

//Console.WriteLine("{0}+{1}={2}",a.ToString(),b.ToString(),sum.ToString());



Console.Read();//起到暂停显示输出结果的作用

}

}

}



说明:

(1)C#中赋值用=,判断两个变量是否相等用==,加法用+,减法用-,除法用/,乘法用

,求余数用%,并且(and)用&&,或者(or)用||

云南爱因森软件职业学院继续教育学院网络技术系教师:张宗杰

6

2、选择结构

if…elseif…else

依据特定条件解决问题、根据条件编写相应的处理代码,程序根据条件选择执行相应的

代码,执行过程依据条件产生分支,这种程序的结构称为选择结构。

如:(1)分段函数求解



usingSystem;

usingSystem.Collections.Generic;

usingSystem.Text;



namespacech2

{

classProgram

{

staticvoidMain(string[]args)

{

intx,result;

Console.WriteLine("请输入一个数字并按回车:");

x=Convert.ToInt32(Console.ReadLine());

result=0;//给变量result赋初值,否则会检测不通过

if(x>0)

{

result=xx+1;

}

elseif(x==0)//C#中判断是否相等是用两个等号(SQLServer只用一个),一个等

号代表赋值

{

result=0;

}

elseif(x<0)

{

result=xx-1;

}

Console.WriteLine("计算后的结果是:{0}",result);

Console.Read();

}

云南爱因森软件职业学院继续教育学院网络技术系教师:张宗杰

7

}

}



3、循环结构

通过重复特定的操作步骤解决问题、程序执行过程中多次重复特定代码,该程序结构称

为顺序结构。

C#提供的循环语句包括for、while、do……while和foreach,这里只讲述for语句和while

语句,其他的请参考相关书籍。

如:(1)计算1+2+3+……+20

用for语句:

for(变量初始化;循环终止条件;变量的变化)

{

//循环体

}

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Text;



namespacech3

{

classProgram

{

staticvoidMain(string[]args)

{

inti,sum;

sum=0;

for(i=1;i<=20;i++)

{

sum=sum+i;

}

Console.WriteLine("计算的结果是:{0}",sum);

Console.Read();

}

}

}



云南爱因森软件职业学院继续教育学院网络技术系教师:张宗杰

8

用while语句

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Text;



namespacech3

{

classProgram

{

staticvoidMain(string[]args)

{

inti,sum;

sum=0;

i=1;

while(i<=20)

{

sum=sum+i;//(1)

i=i+1;//(2),(1)和(2)的顺序交换后结果不一样(注意顺序结构的使用方法)

}

Console.WriteLine("计算的结果是:{0}",sum);

Console.Read();

}

}

}



注:由于时间问题,数组在这里就不讲解了,感兴趣的同学请参考相关书籍。

四、方法(函数)

由于C#是面向对象的程序设计语言(请参考相关书籍学习面向对象的程序设计),所有

函数在C#中叫做方法。

定义方法的原因:重复使用同一个操作,而不用去重复写这个操作的代码。

方法的定义:

1、无返回值的

(1)publicvoid方法的名称()

(2)publicvoid方法的名称(数据类型变量名称)

(2)publicvoid方法的名称(数据类型变量名称,数据类型变量名称……)

2、有返回值的

云南爱因森软件职业学院继续教育学院网络技术系教师:张宗杰

9

(1)public要返回的数据类型方法的名称()

(2)public要返回的数据类型方法的名称(数据类型变量名称)

(2)public要返回的数据类型方法的名称(数据类型变量名称,数据类型变量名称……)

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Text;



namespacech4

{

classProgram

{

//定义一个没有返回值并且没有参数的方法,实现从1加到10

publicvoidGetSum()

{

inti,sum;

sum=0;

for(i=1;i<11;i++)

{

sum=sum+i;

}

Console.WriteLine(sum.ToString());

}

//定义一个有返回值且没有参数的方法,实现从1加到11

publicintGetSum1()

{

inti,sum;

sum=0;

for(i=1;i<=11;i++)

{

sum=sum+i;

}

returnsum;//因为定义的sum是int型的,所以返回的数据类型必须是int的

}

//定义一个有返回值且有参数的方法,实现判断用户输入的两个数是否相等,相等返回true,

否则返回false

publicboolGetSum2(intx,inty)

{

boolresult;

result=false;

if(x==y)

{

result=true;

}

云南爱因森软件职业学院继续教育学院网络技术系教师:张宗杰

10

else

{

result=false;

}

returnresult;

}

staticvoidMain(string[]args)

{

Programps=newProgram();//通过类去调用定义的方法

intx,a,b;

boolresult;

Console.WriteLine("没有返回值的方法的值是:");

ps.GetSum();

Console.WriteLine("有返回值的方法的值是:");

x=ps.GetSum1();

Console.WriteLine(x.ToString());

Console.WriteLine("请输入两个数判断是否相等,按回车输入下一个数字:");

a=Convert.ToInt32(Console.ReadLine());

b=Convert.ToInt32(Console.ReadLine());

result=ps.GetSum2(a,b);

if(result==true)

{

Console.WriteLine("相等");

}

else

{

Console.WriteLine("不相等");

}

Console.Read();



}

}

}



五、常用控件介绍

任何控件都有属性、方法和事件。简单的说事件指单击或双击它会产生什么效果。在这

里只介绍常用的几个控件,其余控件的用法请参考相关书籍。

1、窗体

窗体常用的属性有Name,Text,Size,MaxiMizeBox,MiniMizeBox

其他属性在VisualStudio的属性面板中都能找到,并且有中文提示。

云南爱因森软件职业学院继续教育学院网络技术系教师:张宗杰

11

常用的方法有方法Close(),Hide(),Show()

常用的事件有Load()

实例:新建一个窗体,设置其名称为myFist并没有最大化按钮,并且标题栏显示“我的

第一个windows程序”,在该窗体启动时,自动弹出第二个新建的窗体。

注:由于篇幅和演示问题,请参考给出的该实例的代码和视频。



2、标签(Label)控件

该控件用于显示你要在窗体上显示的文本,常用的属性是Text和Name。



3、按钮(Button)控件

Button控件常用属性和事件如下:

属性Text事件Click

实例:设计如下图所示的窗体,单击某个按钮显示相应的颜色。



注:由于篇幅和演示问题,请参考给出的该实例的代码和视频。



4、文本框(TextBox)控件

常用属性和事件如下:

属性Text,MaxLength,ReadOnly,PasswordChar,MultiLine,ScrollBars,Name

事件TextChanged

实例:设计一个如下图所示的应用程序,实现计算用户输入的数字的和。

云南爱因森软件职业学院继续教育学院网络技术系教师:张宗杰

12



注:由于篇幅和演示问题,请参考给出的该实例的代码和视频。



5、单选按钮(RadioButton)控件

常用属性和事件如下:

属性Text,Checked

事件CheckedChanged,Click:

注:一个组内的单选按钮只能有一个被选中。

实例:设计一个如下图所示的应用程序,选择某个按钮后显示相应的颜色。



注:由于篇幅和演示问题,请参考给出的该实例的代码和视频。



6、多选框(CheckBox)控件

CheckBox控件常用属性和事件如下:

属性Text:多选框控件旁边的标题。

云南爱因森软件职业学院继续教育学院网络技术系教师:张宗杰

13

属性Checked:布尔变量,为true表示多选框被选中,为false不被选中。

事件Click:单击多选框控件时产生的事件。

事件CheckedChanged:多选框控件有被选中和不被选中两种状态,该事件是多选框状态

改变时产生的事件。

实例:设计一个如下图所示的应用程序,选择好后显示你的爱好。



注:由于篇幅和演示问题,请参考给出的该实例的代码和视频。



7、下拉列表组合框(ComboBox)控件

常用属性、事件和方法如下:

属性DropDownStyle,Items,MaxDropDownItems,Sorted,SelectedItem,SelectedIndex

事件SelectedIndexChanged

实例:设计一个如下图所示的应用程序,选择好后弹出对话框显示你的爱好。



注:由于篇幅和演示问题,请参考给出的该实例的代码和视频。



8、菜单

云南爱因森软件职业学院继续教育学院网络技术系教师:张宗杰

14

实例:设计一个应用程序,单击菜单中的某项,弹出对应的窗体。



注:由于篇幅和演示问题,请参考给出的该实例的代码和视频。



六、C#操作SQLServer

1、配置SQLServer的连接字符串

定义一个字符串的变量。

stringcon="server=(local);uid=sa;pwd=10086;database=爱因森";

/

server表示要连接的SQLServer服务器的名称或者IP地址

uid表示登录SQLServer的账户

pwd表示该账号的密码

database表示要连接的数据库

/



2、SqlConnection

要使用该类,必须添加如下的命名空间:

usingSystem.Data.SqlClient;

该类用于连接到SQLServer上,使用方法如下:

stringcon="server=(local);uid=sa;pwd=201215;database=爱因森";

SqlConnectionmycon=newSqlConnection(con);

mycon.Open();



3、SqlDataAdapter

该类一般与DataSet结合起来使用。必须添加如下两个命名空间:

usingSystem.Data.SqlClient;

云南爱因森软件职业学院继续教育学院网络技术系教师:张宗杰

15

usingSystem.Data;

实例1:把院系的信息绑定到下拉列表中(用到的下拉列表控件名称叫comboBox3)



publicvoidBindYX()

{

stringsql="selectfrom院系orderby编号desc";

stringcon="server=(local);uid=sa;pwd=201215;database=爱因森";

SqlConnectionmycon=newSqlConnection(con);

mycon.Open();

SqlDataAdaptermyda=newSqlDataAdapter(sql,mycon);

DataSetds=newDataSet();

myda.Fill(ds,"院系");

comboBox3.DisplayMember="院系名称";

comboBox3.ValueMember="编号";

comboBox3.DataSource=ds.Tables[0].DefaultView;

}

获取下拉列表中值的方法:

(1)获取编号comboBox3.SelectedValue.ToString()

(2)获取院系名称comboBox3.Text.ToString()



实例2:把职工的信息显示在界面上

显示数据用到DataGridView控件。(用到的数据显示控件名称叫dataGridView1)





publicvoidShowTeacher()

{

stringsql="selectfrom显示教师信息";//从视图中查找

云南爱因森软件职业学院继续教育学院网络技术系教师:张宗杰

16

stringcon="server=(local);uid=sa;pwd=201215;database=爱因森";

SqlConnectionmycon=newSqlConnection(con);

mycon.Open();

SqlDataAdaptermyda=newSqlDataAdapter(sql,mycon);

DataSetds=newDataSet();

myda.Fill(ds,"显示教师信息");

dataGridView1.DataSource=ds.Tables[0].DefaultView;

}

创建视图的代码如下:

createview显示教师信息(职工编号,姓名,性别,职称,职务,所在院系)

as

select教师.职工编号,教师.姓名,教师.性别,教师.职称,教师.职务,院系.院系名称

from教师,院系where院系.编号=教师.所属院系



4、SqlCommand

用于实现insert、delete和update操作。

要使用该类,必须添加如下的命名空间:

usingSystem.Data.SqlClient;

三者的操作一样,只是SQL语句不一样,在这里只做insert的讲解。

实例:添加职工信息,如下图所示

云南爱因森软件职业学院继续教育学院网络技术系教师:张宗杰

17



privatevoidbutton2_Click(objectsender,EventArgse)//添加按钮的操作

{

stringcon="server=(local);uid=sa;pwd=201215;database=爱因森";

stringtid=textBox1.Text.ToString().Trim();//获取用户输入的职工编号

stringtname=textBox2.Text.ToString().Trim();//获取用户输入的职工姓名

stringsex="";

stringzc=comboBox1.Text.ToString();//获取用户选择的职称

stringzw=comboBox2.Text.ToString();//获取用户选择的职务

stringyx=comboBox3.SelectedValue.ToString();//获取用户选择的院系

intyx_id=Convert.ToInt32(yx);//将用户选择的院系编号转换成数值型

intresult;

//获取用户选择的职工性别

if(radioButton1.Checked==true)

{

sex="男";

}

if(radioButton2.Checked==true)

{

sex="女";

}

stringsql="insertinto教师values(''"+tid+"'',''"+tname+"'',''"+sex

+"'',''"+zc+"'',''"+zw+"'',''"+yx_id+"'')";

if(tid.Length>0&&tname.Length>0)//判断职工编号和姓名是否输入了,大于0

表示有数据,否则表示文本框的值为空

云南爱因森软件职业学院继续教育学院网络技术系教师:张宗杰

18

{

SqlConnectionmycon=newSqlConnection(con);

mycon.Open();

SqlCommandcmd=newSqlCommand(sql,mycon);

result=cmd.ExecuteNonQuery();//接收SQLServer返回的受影响的行数

if(result>0)

{

MessageBox.Show("添加成功","信息提示",MessageBoxButtons.OK,

MessageBoxIcon.Information);}

else

{

MessageBox.Show("添加失败","信息提示",MessageBoxButtons.OK,

MessageBoxIcon.Error);

}

}

else

{

MessageBox.Show("请输入职工编号或者职工姓名","信息提示",

MessageBoxButtons.OK,MessageBoxIcon.Warning);

}

}

说明:(1)用文本框.Length>0可判断该文本框是否为空。

(2)文本框.Focus()可将光标移到该文本框上。



5、SqlDataReader

从SQLServer中读取满足条件的行,一般与SqlCommand一起使用。

要使用该类,必须添加如下的命名空间:

usingSystem.Data.SqlClient;

实例:检测职工编号是否已经存在

云南爱因森软件职业学院继续教育学院网络技术系教师:张宗杰

19



privatevoidbutton1_Click(objectsender,EventArgse)

{

stringcon="server=(local);uid=sa;pwd=201215;database=爱因森";

stringtid=textBox1.Text.ToString().Trim();//获取用户输入的职工编号

stringsql="select职工编号from教师where职工编号=''"+tid+"''";

SqlConnectionmycon=newSqlConnection(con);

mycon.Open();

SqlCommandcmd=newSqlCommand(sql,mycon);

SqlDataReadermyread=cmd.ExecuteReader();

if(myread.Read())

{

MessageBox.Show("该职工编号已经存在了","信息提示",MessageBoxButtons.OK,

MessageBoxIcon.Information);

}

else

{

MessageBox.Show("该职工编号不存在","信息提示",MessageBoxButtons.OK,

MessageBoxIcon.Information);

}

}



到此,C#与SQLServer的操作基本完成了。其实C#与数据库的操作,就是上面所讲实

例的使用,只是不同的项目中处理事件的逻辑不一样,要考虑的因素很多,但基本的操作不

变。

上述实例中,还有很多的不完善之处,如没有处理与SQLServer连接异常的操作(可用

try?catch语句)。对软件开发感兴趣的同学,请自己参考相关书籍和资料自学吧。

献花(0)
+1
(本文系紫衣风华首藏)