笔记:C#程序设计基础
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
二维数组:
声明:type[,] arrayName; 例如: int[,] arr; 或者int[] arr=new int[2,2]{{1,2},{3,4}}; 初始化:int[,] arr=new int[2,2];
或者int[] arr=new int[,]{{1,2},{3,4}};
宣告: 1. type[,] array-name=new type[index1,index2];
C#中的数据类型:
1.值类型 2.引用类型 这两种类型的差异在于数据的存储方式不同
注:值类型直接存储数据值。值类型在堆栈中进行分配,因此效率很高。复制值类型变量时,复制的是变 量的值,而不是变量的地址。 值类型是从System.VauleType类继承而来的类型。值类型变量不能为null,必须具有一个确定的值。
运算符的使用
1.特殊运算符 2.算术运算符
一元 乘除 加减 移位 比较 相等 位与 位异或 位或 低 逻辑与 逻辑或 条件 赋值
3.移位运算符
4.关系运算符 5.逻辑运算符 6.赋值运算符
>=
is
as
/=
%=
|=
^=
算法
常用的算法只要有回溯法,递归法,递推法,迭代法及穷举搜索法等。
if {…} else if {…} else {…}
type.Parse(string) type.TryParse(string,out var-name) 注:TryParse本身回传的是布林值,执行效果较佳。 System.Convert.ToType(input-var-or-data) 注:Convert可以转换成各种性能。当input-var-or-data变数是null是,却不会发生例外,而是 回传0。
重载方法的实现 方法重载是指调用同一方法名,但各方法中参数的数据类型,个数或顺序不同。 例:
public static int Add(int x,int y) { return x+y; } public static double Add(int x,int y) { return x+y; } public static int Add(int x,int y,int z) { return x+y+z; }
C#中的数组是由System.Array类派生而来的引用对象,因此可以使用Array类中的各种方法对数组 进行各种操作。对数组的操作可以分为静态操作和动态操作,静态操作主要包括查找,遍历和排序等,动 态操作主要包括插入,删除,合并和拆分等。
数组类型是从抽象基类型array派生的引用类型,通过new运算符创建数组并alue
优点 缺点 较安全,在方法内部做运算时,不会更 改到原本变数的值。 较耗空间,当传进方法的资料过大,就 得花较多的记忆体及时间。
Call-by-Reference
只需要传进记忆体位址,无论资料大小, 皆不需经过复制。 较不安全,可以直接在方法内部对原始 变数进行存取。
封装的实现
Switch(【表达式】)
{ case 【常量表达式】:语句块 break; case 【常量表达式】:语句块 break; … default: 语句块 break;
While(【表达式】) { 【语句块】 }
do
{ 【语句块】 }while(【表达式】)
}
注:在while语句的嵌入语句块中,可以使用break语句将控制转到while语句的结束点,而continue语句则可用于将控制直接转 到下一次循环。
static void Main(string[] args) { int[] arr={1,2,3,4,5}; foreach(int n in arr) Console.WriteLine(“{0}”,n+” Console.ReadLine(); } “);
foreach 语句声明一个迭代变量,自动获取数组中的每个元素的值。这是遍历一个数组的首选 方式;如果要以其他方式遍历数组或者修改数组中的元素,那么应该采用for语句,因为 foreach语句中的迭代变量是数组的每个元素的只读副本。
当我们需要外部的资料或是要在方法内修改外部的资料时,就必须将资料以参数的方式传进 人方法。而参数的传进分为Call-by-Value与Call-by-Reference两种方式。 Call-by-Value会 将所传的资料复制一份到方法所宣告的参数中;Call-by-Reference会将所传的变数之记忆体位 址传进人方法,等于是将变数本身未经复制直接传进入方法中,故我们可以在方法中直接存取原 始变数的资料。想要透过Call-by-Reference方式传进的参数,必须在参数型能前加上保留字 ref。
row:行
col:列
arr.GetLength(0); arr.GetLength(1);
属性的定义
例: Public class DATE { Private int Day=7; public int day {
get
{ return Day; } set
{
if((value>0)&&(value<8)) Day=value; }
一维数组:
声明:type[] arrayName; 例如: int[] arr;
初始化:int[] arr=new int[5];
或者int[] arr=new int[5]{1,2,3,4,5};
宣告:1. type[] array-name=new type[index]; 2. type[] array-name=new type[]{values}; 可以通过使用foreach语句或数组的下标将数组中的元素值读出来。
自定义一个MyClass类,用来封装加数和被加数属性。
class MyClass { private int x=0; private int y=0; public int X { get { return x; } set { x=vaule; } } public int Y { get { return y; } set } public int Add() { return X+Y; }
class Program { MyClass mys=new MyClass();//实例化MyClass对象 myclass.X=6;//为MyClass类中的属性赋值 myclass.Y=3; Console.WriteLine(myclass.Add()); Console.ReadLine(); } }
• 布尔类型
引用类型的使用
例: namespace UserReference
{
class C { …. }
static void Main(string[] args) { …. C mm=new C();
….
} }
char 存储的是一个Unicode字元,char需要2个bytes
char ch=„A‟; string str=“sdfsd”;
for(【初始化表达式】;【条件表达式】;【迭代表达式】) { 【语句块】
}
foreach(【类型】 【迭代变量名】 in 【集合类型表达式】) { 【语句块】 }
return语句用于退出类的方法,把控制返回方法的调用者。如果方法有返回类型,return语句必须返回 该类型的值;如果方法没有返回类型,则应使用没有表达式的return语句。
注:引用类型是构建C#应用程序的主要对象类型数据。引用类型的变量又称为对象,可存储对实际数据的 引用。C#支持两种预定义的引用类型,object和string。 所以被称为“类”的都是引用类型。 必须使用new关键字来创建引用类型变量。
引用类型被赋值前的值都是null。
必须在托管堆中为引用类型变量分配内存。
}
}
方法的声明及使用
• 方法修饰符
C#中常用的修饰符有privte,public,protected,internal等4个访问修饰符 和 partial,new,static,virtual,override,sealed,abstract,extern等声明修饰符。 public:公有访问是允许的最高访问级别,对访问公有成员没有限制。 private:私有访问是允许的最低级别,私有访问只有在声明它们的类中和结构体中 才可以访问。 protected:受保护成员在它的类中可访问并且可由派生类访问。 internal:只有在同一程序集的文件中,内部类型或成员才是可访问的。 partial:在整个同一程序集中定义部分类和结构。 new:从基类成员隐藏继承的成员。 static:声明属于类型本身而不是属于特定对象的成员。不需要有类别的物件实体,就 可以呼叫类别中的方法。 virtual:在派生类中声明其实现可由重写成员更改的方法或访问器。 override:提供从基类继承的虚拟成员的新实现。 sealed:指定类不能被继承。 abstract:指示某个类只能是其他类的基类。 extern:指示在外部实现方法。 如果该方法并不返回值,则其返回值类型为void。
方法的分类 1.方法分为静态方法和非静态方法。如果一个方法声明中含有static修饰符,则该方法 为静态方法, 静态方法可以让我们不需要有物件实体,就可以呼叫类别中的方法;没有static修饰符,则为非静 态方法。 2.静态方法不对特定实例进行操作,在静态方法中引用this会导致编译错误。 3.非静态方法是对类的某个给定的实例进行操作,而且可以用this来访问该方法。 this 代表目前的类别
{
y=vaule; } }
方法多载Overloading 可以宣告相同名称但是引数型能或者数量不同的方法。
例如:
public static int int sum(int x,int y) { return x+y; } public static int int sum(int x,int y,int z) { return x+y+z; } public static int int sum(int[] arr) { int total=0; for(int i=0;i<arr.Length;i++) total+=arr[i]; return total; }
常量: Const double PI=3.1415926 声明常量时,必须对其初始化!
值类型的使用 • 整数类型
sbyte:1byte(8位有符号整数) -128~127 short:2bytes(16位有符号整数) int:4bytes 32 位有符号整数 long:8bytes(64位有符号整数) byte: 8位无符号整数 0~255 ushort:16位无符号整数 0-65535 uint:32位无符号整数 ulong:64位无符号整数
• 浮点类型
float:4bytes 精确到7位数 double:8bytes 精确到15~16位数 decimal:16bytes 精确到28位 (如果不做任何设置,包含小数点的数值被认为是double类型。当使用float类型时,必须在数值后面跟随f或者F) float 浮点数 double 双倍精确浮点数 decimal 十进位货币数 4bytes 精确到7位数 1.5x10-45 ~3.4x1037 8bytes 精确到15~16位数 5.0x10-324~1.7x10308 16bytes 精确到28位 1.0x10-28~7.9x1028
2. type[,] array-name=new type[]{ {values1},{values2}… }; 3. type[][] array-name=new type[index][];先决定几行,再决定每一行的大小 例如: int[][] a=new int[3][]; a[0]=new int[2]; a[1]=new int[4]; a[2]=new int[3];
数据类型转换
1.隐式类型转换 2.显示类型转换 3.装箱与拆箱
高
分类
基本 x.y f(x) a[x] unchecked + * + << < == & ^ | && || ?: = += -= <<= >>= *= > != / >> <= ! ~ % x++ ++
运算符
x--new (T)x typeof checked