COOP知识点
c#ooP的一些小知识点,希望对大家有用。
第一章(c#ooP)
Framework(相当于java中的jdk)
2.包含2个部分:框架类库(工具包),cLR(cTS,cLS)
第二章(c#ooP)
1.c#语法:主要是对比与java的区别
(1)数据类型
字符串String:c#的“S”小写大写都可以,一般小写,java大写
布尔bool:java写法boolean
(2)变量和常量
创建隐型变量:var 代替数据类型(参考课本案例)
定义常量:在定义变量前加const,表示该变量只能赋一次初始值,以后不能修改
(3)运算符,表达式(与java相同)
(4)控制语句
if-else(同java)
switch:1.()里可以用字符串来比较,java不行
2.每个case后必须要写break; java可不写
do-while,while,for:(同java)
foreach:
c#语法:foreach (数据类型 元素名 in 数组或集合对象) {…}
Java语法:for (数据类型 元素名 : 数组或集合对象){…}
2.数组
(1)一维数组同java,但[]不能写在变量后面
(2)多维数组分2种,一种同java,另一种:int[,] = new int[3,3];2种写法含义不同
3.枚举:是一种自定义的数据类型,类似一种由多个常量组成的集合类型
(1)语法:
定义:enum 枚举类型名{常量1,常量2,常量3,…}
声明:枚举类型名 变量名;
初始化:变量名 = 枚举类型名.常量1;
(2)定义的位置:在main方法外面写,或class的外面写
4.数据类型转换:convert.ToXXXX(任意类型数据);-把任意类型的数据转换为指定类型数据
第三章(c#ooP)
1.类:计算机模拟现实,描述一个现实事物的抽象,类是一个自定义的复合数据类型 把有关联的信息记录在一起,方便操作
(1)类包含2个主要成员:属性,方法
(2)定义的位置:一般新建一个class文件单独写,也可在其他class文件并列class写
(3)定义的语法:
public class 类名
{
c#ooP的一些小知识点,希望对大家有用。
//属性 public string id; public string name; //方法 public void study(){ console.WriteLine(“我爱学习”);}
}
2.对象:类的具体实现,描述一个具体的事物,可以理解为自定义类的变量
(1)实例化对象:(同变量的用法3步骤)
类名 对象名 = new 类名();
或:
类名 对象名(变量名);//声明一个对象
对象名 = new 类名();//初始化这个对象(变量)
(2)使用对象:一般是使用对象里的成员(属性和方法)
使用属性:对象名.属性名
使用方法:对象名.方法名();
3.构造方法: 实例化对象时要“new 类名()”,“类名()”就是构造方法,用来构造对象的。
(1)、构造方法会在定义类时,自动生成,是隐藏的。
(2)、可以对构造方法重写,举例说明实例化对象时调用了构造方法。
如果想给对象赋初始值,可以给构造方法加参数
4.如果初始值不确定,可以用重载实现。
(方法重载:方法名相同,参数列表不同1、个数;2、类型;3、顺序)
注:(1)构造方法名与类名相同,没有返回值(void不写)
(2)隐藏的不带参数的构造方法在手动书写后会被覆盖。
(3)一般定义类时,会用到2个构造方法:不带参和给所有属性赋值的带参。
5.如果构造方法参数名和属性名一样如何区分?
this:表示本类对象。(当前所在类的对象)
要指定属性时用:this.属性名
6.命名空间:相当于文件夹
如果类放在不同的文件夹(命名空间)可以通过:”命名空间名.类名”访问
也可以在类的最上面写using 路径,后面的类就不用带路径了
7.访问修饰符:
public:公开的,任何地方全部可用
internal:默认的,可以省略,同一命名空间内可以使用
protected:受保护的,父子类之间可以使用
private:私有的,只有自己可以使用
8.值类型和引用类型(参考以前学习的int和数组做参数调用时的区别)
值类型: int,double等八种基本数据类型,枚举,结构体(以后会学)
c#ooP的一些小知识点,希望对大家有用。
引用类型:数组,类
注:string特殊,是引用类型,但同时又是值传递
9.装箱和拆箱
装箱:把值类型转换为引用类型
拆箱:把引用类型转换为值类型
第四章
1.ref和out关键字
作用:把值类型的变量当作引用类型传递参数
写法:分别在形参和实参前面加ref(out)
注意:1.定义方法时,ref(out)写在形参数据类型前
2.调用方法时,ref(out)后的实参不能写常量,只能写变量
3.ref和out的区别:out后的实参可以是未初始化的变量,ref不行
2.static修饰符:静态的
使用位置:static写在访问修饰符(public等)后
使用对象:类,属性,方法
注:1.static修饰类时,该类里的所有属性和方法都必须是static的
2.用static修饰的属性和方法,直接通过:类名.属性(类名.方法)来调用
3.方法的重载:参考winform知识点
第五章
1.结构体:和类差不多的数据类型(类的前身)
定义:与类相同,把class关键字改成struct就行
例子:struct Student
{
public string name;
public void study()
{}
}
与类的区别:1.结构体是值类型,类是引用类型(重点)
2.结构体可以不用new实例化,类必须用new
3.结构体不能被继承,类可以被继承
2.属性:用来封装类中成员变量(通过方法给成员加一些限制)
语法:private string name; //
public string name //注意第一个字母大写
{
get{ return name; } //读属性
set{ name = value; } //写属性
}
自动属性:3.0版及以上的功能,更简单的写法
c#ooP的一些小知识点,希望对大家有用。
语法:public string name { get; set; }
3.索引器:用来封装类中数组变量的成员,并优化数组中元素的查找方式
一般要写2种索引器
语法1:下标索引器
public Student this[int index]
{
get { return students[index]; }
set { students[index] = value; }
}
语法2:字符串索引器//一般情况只有读属性,没有写属性
public Student this[string name]
{
get
{
Student stu = null;
foreach (Student s in this.students)
{
if ( == name)
{
stu = s;
}
}
return stu;
}
}
用法:对象名[index] 或 对象名[“字符串”]
第六章
1.委托:委托是一个数据类型,用这种数据类型声明的变量可以用来存储方法的签名 作用:可以把方法名当做参数来进行传递
用法:1.定义委托
public delegate 返回值类型 委托类型名(参数类型 参数1,…);
2.声明并实例化委托变量(给委托绑定方法:返回值类型和参数列表必须一致)
委托类型名 委托变量名 = new 委托类型名(方法签名);//方法签名不要()
3.调用委托
委托变量名(参数1,…);
特点:委托可以绑定多个方法”+=”,也可以撤销指定方法” -=”
匿名方法:不定义方法(没有方法名),直接把方法内容绑定到委托里
2.事件:封装了的委托变量(相当于类中属性和成员变量的关系)
c#ooP的一些小知识点,希望对大家有用。
用法:前提:定义委托 //任意一个类的外面写
1.定义事件(就是声明一个封装了的委托变量)//事件源中写
public event 委托类型名 事件名;
2.订阅事件(给事件绑定方法)
事件名 += new 委托类型名(方法签名);// 事件响应者的方法
3.引发事件(类似于调用委托)//事件源中写
事件名(参数1,…);
注意:事件一般涉及2个对象:事件源 和 事件响应者
第七章
1.继承:子类(派生类)继承父类(基类),子类就拥有了父类的属性和方法
语法:(定义类时) 子类:父类
特点:1.单根性。一个子类只能继承一个父类
特点:2.传递性。如果A继承B,B继承c,那么A也继承c
2.protected:(受保护的)用它修饰的成员变量或方法,就只能给它自己或它的子类使用
3.继承中的构造方法:先调用父类构造方法,再调用子类构造方法
方式1:隐式调用:默认情况下(不做任何指定),子类会调用父类不带参数的构造方法
方式2:显式调用:指定调用父类的某一个构造方法。
public Son(string name,string sex,string color)
: base(name, sex)
{
headcolor = color;
}
4.sealed:如果你的类不想被继承,可以加该关键字
5.继承中方法的重写(override)(多态)
语法:父类的方法用virtual(或override)修饰,子类可以用override对其进行重写 作用:参考案例lesson7
注:子类继承父类,那么可以把子类对象放到父类引用里
6.重载(overload)和重写(override)的区别
区别:1。重载是一个类里,有多个相同名称的方法;重写是在两个类里(父子类),各自有相同名称的方法。
2.重载方法名相同,参数列表不同;重写方法名相同,参数也相同,用virtual修饰父类方法,override修饰子类方法
第八章
c#ooP的一些小知识点,希望对大家有用。
抽象方法:用abstract修饰的方法
1.抽象类:用abstract修饰的类(public abstract class 类名)
特点:1.抽象类不能实例化对象,只能被子类继承
2.如果一个类里有抽象方法,那么这个类一定是抽象类;但定义一个抽象类,里面不一定非要有抽象方法。
3.抽象类里可以有具体的方法(非抽象方法)
4.子类继承抽象类时,必须实现抽象类里的所有抽象方法,除非子类也是抽象类
5.抽象类可以有构造方法,但自己不能调用,是给子类调用的
2.接口:定义一个标准和规范,关键字是interface,接口是一个数据类型
注意:1.接口里只能声明方法,属性,索引器,事件
2.接口里的内容默认的都是public,所以不用加修饰符,如果写了会编译报错
3.接口名以大写字母“I”开头
4.如果一个类实现接口,那么必须实现接口里的所有内容,除非该类是抽象类
特点:1.接口可以多继承(一个类只能继承一个父类,但是同时可以实现多个接口)
2.继承的父类必须写在“:”后的第一个位置,后面的接口用“,”隔开
3.如果一个类在实现多个接口时出现方法名相同的情况,要用显示实现接口
4.接口可以绑定
5.接口作为参数,也可以实现多态
3.is和as的用法
is:判断某一对象是否是某一类型,如果是返回true,如果不是返回false
例:if(c is IPrint)
as:把某一对象转换为某一类型 例: IPrint c1 = c as IPrint;
4.抽象类和接口的区别(参考课本P189)
第九章
1.Math类:用于数学计算的一个静态类
常用方法:参考课本P197
2.Random类:求随即数
常用方法:r.next(minValue,maxValue);
3.DateTime类:计算时间的类
常用属性:now:当前时间
常用方法:(分2类)
1. 计算时间
2. 把时间类型转换为字符串类型
4.String类
常用属性:Length
常用方法:contains() Indexof() Replace() Split() Substring() 等
5.StringBuilder类:连接字符串时效率比String类高
c#ooP的一些小知识点,希望对大家有用。
常用属性:Length:字符串的长度。 capacity:所占用内存的大小。
常用方法:Apend():添加字符串。
注:该类一般在拼接sql语句时使用
6.正则表达式:由一些特殊符号组成的方便字符串查找的一种式子
Regex类:
常用方法:IsMatch(静态方法和实例方法)
//静态方法验证(前一个参数是要判断的字符串,后一个参数是正则表达式)
bool b = Regex.IsMatch(str1,@"\d");
//实例方法验证
//1.实例化一个正则对象(把正则表达式字符串放到Regex对象的属性里)
Regex reg = new Regex(@"\d");
//2.验证字符串str1是否匹配
b = reg.IsMatch(str1);
第十章
1.Array:是数组的基类(抽象类)
常用属性:Length
常用方法:Array arr = Array.createInstance(typeof(类型),长度); 构建数组对象
2.ArrayList:进化版数组的集合类。1.可以动态添加和删除。2.可以存储不同类型的元素。 常用属性:count
常用方法:Add(); Insert(); Remove(); RemoveAt();
访问元素:对象名[index] (和数组类似)
3.Hashtable:方便查询的集合类
常用属性:Keys:所有key的集合
Values:所有value的集合
常用方法:Add(key,value)
访问元素:对象名[key]
ArrayList和Hashtable区别:
1. 前者有顺序,后者没有顺序
2. 前者添加删除方便,后者查询效率高
4.泛型集合:由于集合存储的数据类型不同,使用起来不方便,也不安全,所以通过泛型来统一其数据类型。
1.ArrayList对应的泛型集合是List<T>
2.Hashtable对应的泛型集合是Dictionary<TKey,TValue>
使用方法和对应的集合相同。
5.排序接口Icomparable、Icomparable<T>、Icomparer<T> 参考案例Lesson10_3
c#ooP的一些小知识点,希望对大家有用。
6.其他:初始化器,Lambda表达式(以后c#方向会学习LInQ,有相关知识),扩展方法
第十一章
1.调试程序:查看“调试”菜单的功能
操作步骤:1.添加/删除 断点:左键单击代码右端
2.启动调试程序:快捷键F5,程序会自动暂停在第一个(下一个)断点处
3.单步跟踪:F10(一行一行执行),F11(如果碰到方法调用,会进入方法)
4.查看变量:选中变量 右键 添加(快速)监视
2.异常:程序编译时正确,运行时可能会出问题
写法:1.try
{可能出现异常的代码块}
catch (异常类型)
{出现异常后要执行的代码块}
2. try
{可能出现异常的代码块}
catch(异常类型1)
{出现异常后要执行的代码块}
catch(异常类型2)
{出现异常后要执行的代码块}
…….
3. try
{可能出现异常的代码块}
catch (异常类型)
{出现异常后要执行的代码块}
finally
{不管正常或异常代码都会执行}
throw:抛出异常给外层的代码块处理
第十二章
1.文件和文件夹的基本操作
文件:File静态类,create,copy,Move,Delete
文件夹:Directory静态类,createDirectory,Move,Delete
另外:File对应的非静态类是FileInfo,Directory对应的非静态类是DirectoryInfo
2.文件的读写:读和写类似(只演示一个)
写文件:StreamWriter,BinnaryWriter
string path = txtPath.Text;
//定义文件流对象(准备笔记本)
FileStream fs = new FileStream(path, FileMode.openorcreate, FileAccess.Write); //定义写对象(笔)
StreamWriter sw = new StreamWriter(fs);
c#ooP的一些小知识点,希望对大家有用。
//写东西
sw.Write(txtcontent.Text);
//关闭写对象
sw.close();
//关闭文件流对象
fs.close();
读文件:StreamReader,BinnaryWriter
3.对话框:openFileDialog,SaveFileDialog(用法类似,只写一个)
//实例化保存文件对话框对象
SaveFileDialog sfd = new SaveFileDialog();
//打开对话框
DialogResult dr = sfd.ShowDialog();
if (dr == DialogResult.oK)
{
txtPath.Text = sfd.Filename;//取得文件路径
}
常用属性:Filename;//取得文件路径
sfd.Filter = "c#文件(*.cs)|*.cs";//保存文件类型的格式提示
4.序列化:把对象转换为文件
反序列化:把文件转换为对象
用法:1.在要序列化对象的类上加[Serializable]
2.定义FileStream对象
3.定义序列化对象BinaryFormatter
4.调用序列化(反序列化)方法:Serialize(Deserialize)
5.关闭FileStream对象
补充知识点:
进程:运行中的程序Process