C#语言

C#语言学习

第一个C#程序

.NET概述与C#应用

.NET是Microsoft.NET的简称,是基于Windows平台的一种技术。它包含了能在.NET Framework平台运行的所有的编程语言。.NET Framework是微软(Microsoft)为开发应用程序创建的一个富有革命性的新平台,在这个平台环境中,可以开发运行在Windows上的几乎所有应用程序。

简单地说,.NET Framework是一个创建、部署、运行应用程序的多语言多平台语言,他包含了一个庞大的代码库,各种能够运行在.NET Framework平台上的语言都可以共享这个代码库。

2000年,配合.NET平台的发布微软发布了一门新语言:C#(发音为C Sharp)。它是专门为.NET平台设计的一种语言,其设计者Anders Hejlsberg是一位颇具传奇色彩的人物:Anders Hejlsberg早年曾在著名的Borland公司工作,是Pascal和Delphi语言的缔造者。1996年他离开Borland加盟微软,并在之后创造了C#语言。

C#的优势

1.C#是一种全新的语言,在设计它的时候,微软博采众长,将C、C++、JAVA等多种开发语言的有点集于一身,它是专为.NET开发而设计的编程语言,是微软为奠定其下一代互联网霸主地位而打造的,是Microsoft平台运行的主流语言。C#一经推出便以其强大的操作能力、优雅的语法风格、创新的语言特性、第一流的面向组件编程的支持而深受世界各地程序员的好评和喜爱。

2.微软向ECMA(欧洲计算机厂商协会)申请将C#进行作为一种标准。C#在2003年成为一个ISO标准(ISO/IEC 23270)。在ECMA的版权和许可政策下,已经实现了真正的开放。任何客户、任何人都可以获得ECMA C#标准,并对其进行扩展、修改,并且无须付版税。

3.C#提出了纯粹的面向对象概念,并在语言特性中展现得淋漓尽致,C#还通过引用类型、值类型和接口类型的概念形成了统一的类型系统。C#从2.0版本开始,对泛型提供了更完整的支持。泛型是微软重点推出的内容,它可以使程序更安全、代码更清晰且更容易控制。

4.强大的类库支持。C#有着数量庞大、功能齐全的类库支持,从而可以轻易地完成复杂的加密操作、网络应用操作等。使用C#可以轻松地构建功能强大、开发快捷、运用方便的应用程序。

5.专业控件。微软制作了上千个控件,像ComboBox有多达三十多种变种控件,并且可以在MSDN(Microsoft Developer Network)的网站检索更多的控件,也可以把自写的控件上传给微软向世界共享。

6…NET平台为C#语言开发环境提供了强大的技术文档–MSDM,它是微软向软件开发者提供的一种信息服务。MSDM是以Visual Studio 和 Windows平台为核心整合的开发虚拟社区,包括技术文档、在线电子教程、网络虚拟实验室、微软产品下载等一系列服务。

IDE环境

每种语言的背后总离不开它所依赖的一种环境,例如,JAVA依赖的是JDK和支持它的软件:eclipse。

Visual Studio是微软推出的强大的平台和技术,并提供了强大的集成开发环境(IDE)来支持,它集成了.NET Framework,是目前最流行的.NET平台开发环境。

我们可以利用Visual Studio创建Windows平台下的Windows应用程序和网络应用程序,也可以创建网络服务、智能设备应用程序和Office插件等。

认识C#程序

using System;
using System.Collections.Generic;
using System.Ling;
using System.Text;

namespace HelloWorld
{
	class Program
	{
		static void Main(String[] args)
		{
			Console.WriteLine("Hello World!");
			Console.ReadLine();
		}
	}
}

1.namespace关键字

​ namespace(命名空间)是C#组织代码的方式,它的作用类似于Java中的package(包),这样我们就可以把紧密相关的一些代码放在同一个命名空间中,大大提高管理和使用的效率。

2.using关键字

​ 在Java中,如果导入其他包,应该使用import关键字。而在C#中,使用using关键字来引用其他命名空间,它的作用和Java中的import类似。

3.class关键字

​ 与Java一样,C#也是一种面向对象的语言,使用class关键字表示类。注意:C#与Java不同,不要求类名必须与源文件的名称一致。

4.Main()方法

C#中的Main()方法和Java中的Main()方法作用是一样的,是程序运行的入口,应用程序从这里开始运行。

C#Main()方法的语法

static void Main(String[] args){}
static int Main(String[] args){}
static void Main(){}
static int Main(){}

C#中的注释

行注释://

块注释://

文档注释:///

代码注释:#region #endregion

C#的常量和变量

C#中的数据类型:

整型:int

浮点型:float

双精度型:double

字符串型:string

布尔型:bool

变量的语法:数据类型 变量名称

常量的语法:const 数据类型常量名称 = 值

C#中的输入输出语句

输出语句:

方式一:

Console.WriteLine();

方式二:

Console.WriteLine(要输出的值);

方式三:

Console.WriteLine(“格式字符串”,变量列表);

输入语句:

方式一:

Console.ReadLine();

类和对象

类是创建对象的模板,对象是类的一个具体实例,这就是类和对象之间的关系。在每个人身边,能够看到或触摸到的“东西”,都可以称之为对象。

C#语言中,定义类的语法如下:

[访问修饰符] class 类名

{

			//类的主体

}

除了使用.NET提供的类的方法,也可以在类中添加自定义的方法。

语法:

[访问修饰符] 返回值类型 方法名(参数列表)

{

				//方法的主体

}

1.访问修饰符

private私有的
protected受保护的
public公开的
internal默认的

2.方法的返回值类型

编写的方法是实现特定功能的模板,可供他人调用,在调用后可以返回一个值,这个返回值的数据类型就是方法的返回值类型。

3.方法名

每个自定义的方法都要有一个名称,方法的名称应该有明确的含义,这样别人在使用的时候,就能清楚地知道这个方法能实现什么功能。

4.参数列表

调用方法时,可以向方法中传递参数,这些参数构成了参数列表。如果没有参数就不需要参数列表了。

5.方法的主体

方法的主体部分就是这个方法实现某一特定功能的代码。

C#语法快速热身

C#大部分语法与Java(if选择结构,for循环,while循环,二重循环)相同,可查看我之前写过的Java章节的博客,现在来讲一下C#与Java的不同。

switch选择结构

在Java语言中允许case中没有break语句,如果当前执行的case中没有break语句,程序会继续执行下一个case,直到遇到第一个break语句跳出,或执行完switch结构。

C#语言要求每一个case和default语句中都必须有break语句,除非两个case中间没有其他语句,那么前一个case可以不包含break。另外,C#中的switch判断更加灵活,判断的表达式或变量还可以是字符串类型。

以下是Java语言与C#语言的switch结构:

switch(表达式)
{
    case 常量表达式1:
        //语句1;
        break;//可以没有
    case 常量表达式2:
        //语句2;
        break;//可以没有
        ......
     default:
        //语句n;
}
switch(表达式)
{
    case 常量表达式1:
        //语句1;
        break;//必须有
    case 常量表达式2:
        //语句2;
        break;//必须有
        ......
     default:
        //语句n
        break;//必须有
}

数组

Java语言中声明数组有两种方法:

数据类型[] 数组名;
数据类型 数组名[];

但是在C#中只能使用一种方式来声明数组:

数据类型[] 数组名;

获得数组的长度:可通过数组的Length属性。

语法:数组名.Length

注意:

如果在程序中需要得到数组的长度,应该使用“数组名.Length”语句获得,而不是用数组定义的长度。

冒泡排序

int[] num = {12,45,3,55,23,44};
for(int i = 0 ; i < num.Length - 1 ; i++){
    //将最大的元素交换到最后
    for(int j = 0 ; j < num.Length - 1 - i ; j++){
        if(num[j] > num[j + 1]){
            int ap = num[j];
            num[j] = num[j + 1];
            num[j + 1] = ap;
        }
    }
}

冒泡排序的过程就像它的名称一样,如果把较小的数比作气泡,排序的过程就是气泡不断向上冒的过程,越小的数冒得越高。我们从数组的第一个元素开始,将当前元素同它后面的元素进行比较,每一轮比较都找到一个最大的数交换到数组的尾部,也就是说大的气泡向后冒。外层循环控制比较多少轮,内层循环控制每轮比较多少次。程序的关键是确定内层循环和外层循环循环变量的初始值和终止条件。我们按照循环过程一起来走一遍,你就会明白内层循环的终止条件为什么是“数组长度-1-i了”。

冒泡排序是从底层的元素开始,比较它和它上方紧挨着的元素,如果下面的元素小于上面的元素,就交换它们的位置;否则保持原样。然后转到往上一个位置,重复以上过程,最后,最小的元素移到了顶部。这时再从底层元素开始比较,重复前面的冒泡过程,就可以将第二小的数放在第二个位置上,如此重复下去,直到所有的元素按照上小下大的顺序排序。

C#的进一步学习

面向对象的特征——封装

在面向对象编程中,封装可以理解为将数据和操作方法保存在一起的技术,或是有选择地隐藏或公开类中地属性和方法地过程。封装地具体实现是将成员变量、方法和属性以类地形式进行封装,在类或对象之间通过消息传递进行相互交流,而传递消息是通过调用类公开的方法完成的。

封装是面向对象的重要内容,也是面向对象的三大特征之一(封装,继承,多态)。它用于隐藏内部实现,对外只暴露对类的基本操作,而不会让其他对象影响类的内部实现。

封装的好处:

避免使用非法数据赋值。

保证数据的完整性。

避免类内部发生修改时,导致整个程序的修改。

Private访问修饰符

访问修饰符概念:

在应用程序中,访问修饰符可以用来修饰类成员字段和方法,以此限定类成员的可访问级别。如果将类的成员(变量或者方法)声明为public,就表示这些类成员可以被其他类访问。如果使用private限制类成员的访问权限,那么这些类成员就只能在该类里面使用,其他类对它们没有访问权限。

在面向对象的程序中,可以将访问修饰符放置在类中每个成员的定义之前,无论它是一个字段还是一个方法。每个访问修饰符只能为紧随其后的成员指定特定的访问权限。如果将某个字段或者方法声明为public,就表示其他类可以访问这个字段或方法;如果声明为private,那么该字段或方法就只能在本类中使用,其他类不能访问。

注意:如果在成员定义之前没有指定访问修饰符,那么这个类成员的访问权限默认为internal

**优点:**通过使用访问修饰符,可以更安全地编程,保护类中比较敏感的成员,公开外部需要访问的成员。

this关键字

class Student
{
    private string _name;
    public void SetName(string _name)
    {
        _name = _name;
    }
}

分析:

在Student类中定义了一个private成员变量_name,在SetName()方法的参数中也定义了一个与之同名的_name。这时编译器会发现成员变量和方法的参数重名了,它就会报错。

在面向对象的编程语言,this关键字是指当前对象本身,通过this可以引用当前类的成员变量和方法。如将上面问题中的Student类的SetName()中代码"_name=_name;“改写为"this._name=_name;”。

由此可以看出:使用this关键字可以解决成员变量和局部变量名称冲突的问题。

用属性实现字段封装

1.C#的属性

在C#中,字段通常是私有的。如果要访问类中的字段,需要通过get和set访问器实现,这种结合了字段和方法的实现方法我们称之为属性(property)。

语法:

private string _name;
public string Name
{
	get{return _name;}
	set{_name = value;}
}

get访问器用来返回相应的私有字段的值。get访问器与方法类似,必须用return语句返回字段的值。执行get访问器相当于读取类中私有字段的值。

set访问器用来设定相应的私有字段的值。set访问器类似于返回类型为void方法。它使用一个隐含的输入参数value。当对属性赋值时,将会调用set访问器,并将新的参数赋予对应的字段。

2.属性的数据类型

定义类中的一个属性时,属性的数据类型必须与它所访问的字段类型一致。

注意:属性的类型可以是一个类或一个数组。

3.属性的访问类型

属性除了可以约束数据访问外,还可以设置读、写属性来限定它的访问类型。属性的访问类型分为以下三种:

(1)只读属性,只包含get访问器。

(2)只写属性,只包含set访问器。

(3)读写属性,包含get和set访问器。

4.在编码中快速地创建属性

属性在C#开发中地使用是非常普遍的,除了手动输入代码外,Visual Studio还提供了一个快捷的方法;重构-封装字段。在一个类中,定义一个字段,通常设定为私有,选中这个字段右击,在弹出的快捷菜单中选择“重构”—>“封装字段”选项。选择“封装字段”选项后,Visual Studio会打开一个窗口,可以修改属性的名称,在单击“确定”按钮后就会将选择的字段与属性建立关联。

封装字段的快捷键是:Ctrl+R、E

5.对象初始化器

在C#中,提供了对象初始化器,可以更方便地为对象地属性赋值:

Student student = new Student(){Age = -20}

当类中有多个属性时,使用对象初始化器可以同时为多个属性赋值。多个属性之间用逗号间隔,使用{}封闭。

值传递和引用传递

值传递

实参调用方法只是把参数的值传到方法里面,如果在被调用的方法中对参数值进行了修改,在方法调用之后,参数仍然时原来的值。

值传递是将变量的值复制一份传递给方法,使得该方法的形参和实参的值相同。在调用的方法中修改形参也只是对实参复制品的数据做更新,并没有真正改变实参的值。

按引用传递参数

方法中数据的传递除了值传递外,还可以按引用传递参数。利用按引用传递参数的方式可以在方法调用之后,仍然保留对参数值的修改。

引用传递是将要传递的对象的引用复制给方法的形参,使得被调用的方法直接对引用对象进行更改,会影响实参原来的值。

深入C#的String类

C#中的String类

方法说 明
bool Equals(string value)比较一个字符串与另一个字符串value值是否相等。相等返回true,否则返回false
int Compare(string str, string str1)比较两个字符串的大小关系,返回一个整数。str<str1,返回值小于0;str=str1,返回值为0;str>str1,返回值大于0
int IndexOF(string value)获取指定的value字符在当前字符串中第一个匹配项的位置。
string Join(string spearator, string[] value)把字符串数组value中的每个字符串用指定的分隔符spearator连接,返回连接后的字符串。
string[] Split(char separator)用指定的分隔符separator分割字符串,返回分割后的字符串数组
string Substring(int startIndex,int length)从指定的位置startIndex开始检索长度为length的子字符串
string ToLower()获得字符串的小写形式
string ToUpper()获得字符串的大写形式
string Trim()去掉字符串前后两端多余的空格
Format格式化

程序员常常会使用格式字符和参数列表的形式输出应用程序的数据,例如:

string name = "小聪";
Console.WriteLine("我的名字是{0},我的年龄是{1}。",name,18);

这段代码中,Console.WriteLine()方法的参数“我的名字是{0},我的年龄是{1}。”叫做格式字符串,格式字符串后面“name,18”是参数列表,格式化字符串中的{N}叫做占位符。

通常,客户大部分都需要按照特定的格式在屏幕或报表中输出程序数据。为了满足客户这方面的需求,往往需要用到C#的String类提供的一个Format()方法对输出的字符进行格式化。Format()方法允许把字符串、数字和布尔型的变量插入到格式字符串当中,它的语法和WriteLine()方法很相似。

语法:

String myString = String.Format("格式字符串",参数列表);

其中,格式字符串中包含固定文本和格式项。格式项的形式如下:

{索引[,对齐][:格式字符串]}

类型转换

简单的类型转换
1.隐式类型转换

对于任何数值类型A,只要其取值范围完全包含在类型B的取值范围内,就可以隐式转换为类型B。也就是说,int型可以隐式转换为float型或double型float型可以隐式转换为double型。

2.显示类型转换

与隐式类型转换相反,当要把取值范围大的类型转换为取值范围小的类型时,就需要执行显示转换(类型强转)。

数值类型与字符串之间的转换
1.字符串转换为数值型

将字符串转换为整型的代码:

int.Parse(string);

将字符串转换为单精度浮点型的代码:

float.Parse(string);

将字符串转换为双精度浮点型的代码:

double.Parse(string);

注意:要转换的字符串必须是数字的有效表示形式。什么意识呢?简单来说就是表面上看起来是对应的数字,例如,可以把“30”转换为整数,因为它是由数字构成的,但是不能把“name’”转换为整数,因为它不是整数的有效表示形式。

2.数值型转换为字符串
int age = 18;
string myage = age.Tostring();
使用Convert类进行转换

Parse()方法可以将字符串类型转换为数值类型,其实C#还有一个更全能的类——Covert类,它可以在各种基本类型之间执行数据类型的互相转换。Covert类为每种类型转换都提供了一个对应的方法,Covert类常用的方法如下表:

方 法说 明
Covert.ToInt32()转换为整型(int型)
Covert.ToSingle()转换为单精度浮点型(float型)
Covert.ToDouble()转换为双精度浮点型(double型)
Covert.ToString()转换为字符串类型(string型)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值