二:定义方法:访问修饰符返回值类型方法名称(参数){方法体}1.访问修饰符:public private protected internala)public :使用它来定义的成员可以在所有类里面使用(不同项目需要先引用)b)private:私有的,只有在当前类中可以使用c)protected:使用它来定义的成员只有在当前类或者当前类的子类中使用。
d)internal:在当前整个程序集中可以使用2.返回值类型a)void:没有返回值.(可以写return(可以提前终止方法),但是不能return具体的值)b)非void,必须返回相应类型的值(任何类型都可以做为方法的返回值类型)3.方法名称:a)Pascal命名法,每一个单词的首字母需要大写b)不能使用关键字(int double bool string …..class namespace)c)不能包含_以外的特殊符号,不能以数字开头java(_ $)4.参数a)形参:只是一个参数的声明,说明调用的时候需要传递过来的值(类型一致,个数一致,顺序一致)---形参是实参的规范。
Params三:静态与非静态之间的调用方式:1.在单个类中:静态不能直接调用非静态成员(属性,方法),只能通过实例化的对象调用。
2.在单个类中:静态可以直接调用静态成员3.在单个类中:实例成员可以自由调用静态成员(银行vip---非vip)4.在不同类中:实例成员通过类的对象调用,而静态成员通过类名调用。
5.为什么静态不能直接调用非静态成员:静态成员与类一起加载,在加载静态成员的时候,非静态成员还没有生成。
四:C#Main方法的四种形式:1.staticvoid Main(string[] args)2.staticvoid Main()3.staticint Main(string[] args)4.staticint Main(s)五:可变参数:params:它是一个数组类型的变量。
会自动根据用户传递的值生成一个数组(注意传递的值需要同一类型。
)1.可以根据需要传递0 个或者多个参数。
2.如果没有传递任何参数,需要做一个判断,不然可能造成索引越界的错误。
六:习惯决定性别,性格决定命运15天1.模仿2.将每一句代码添加上注释3.删除代码,根据注释重写代码4.删除注释,重写代码,添加注释七:代码规范:1.注释:a)// 单行注释b)/**/:多行注释c)///文档注释:可以生成提示2.变量命名:camel:第一个单词首字母小写,后面每一个单词的首字母大写3.对于类和方法:每一个单词首字母都要大写。
4.代码需要缩进与对齐。
记住:1.在企事业里面可能这有这样的建议:规定所有自定义变量都使用_ 开头2.变量的名称一般是名词:说明这个变量有什么用3.方法:一般是动词,说明这个方法可以执行什么样的操作4.在定义变量的时候,长短不是关键,意义才是关键八:数组:所有存储结构中效率最高的。
因类它在内在中是一串连续的空间1.如何定义:类型[] 名称=new int[长度];2.数组里面只能存储同一类型的值3.在c#中,[]只能写在类型后面4.一般需要确定长度或者值,可以同时指定,但是长度与值的数量需要对应。
5.因为数组长度固定,所以对数组的操作一般可以考虑使用for循环结构!6.数组元素的添加:1.int[] arrScore = newint[5]{1,2,3,4,5};2.arrScore[0]=1;//如果只为其中某一些下标对应的数组元素赋值那么其它的就会有默认值。
3.for (int i = 0; i < arrScore.Length; i++){arrScore[i]=值;}7.数组元素的修改:ArrScore[i]=值;8.九:二维数组和交错数组1.二维数组a)定义:int[,] arr=new int[3,4];//必须指定二个维度的值a)交错数组的本质就是一个一维数组,只不过这个数组里面的每一个元素值又不一个数组b)交错数组的元素需要先实例化,因为数组是一个引用类型的变量,需要先实例化再使用,如果没有实例化会出现“未将对象引用设置到对象的实例”c)因为交错数组的每一个元素类型是数组,所以遍历的时候就可以按遍历一维数十:return:1.可以返回一个变量---当方法有返回值类型的时候2.还可以中止当前方法3.如果在异常处理结构里面,不管是否之前运行到return,finally的代码都会被执行。
十一:变量的作用域:1.全局变量(成员变量):类的属性:public private2.局部变量:在方法体内定义的变量---作用域只是在方法体内,出了方法体就不能再使用,如果一定需要使用,有三个方法:a)可以做为参数传递b)还可以做为返回值c)还可以做成类的成员变量---静态成员变量不是很安全十二:方法重载:系统会根据调用方法传递的实参来自动匹配拥有相应形参的方法。
1.方法名称一致,但是方法的参数不一致(参数的类型不一致,参数的数量不一致),只要满足其中一个就构成重载的条件(如果两个都满足那一定构成重载的条件)--与方法的返回值无关。
2.这里的方法重载是指同一个类中方法重名,参数不一致的情况。
3.作用:同一个名称,多种响应结果(与你的参数有关系),解决了命名烦恼。
十三:普通的值传递和ref传递参数:1,普通的值做为参数传递的时候,传递是其实是值的副本,对副本的操作不影响到原始值2,如果使用了ref/out传递参数,那么传递是存储了值类型数据的栈空间地址,会造成原始值和方法形参指向同一个地址空间,在方法里面进行的修改会影响到原始值。
3,Ref侧重于输入,out侧重于修改。
如果使用out传递参数,那么:1.在方法里面必须对传入的参数进行值的修改。
2.out传入参数可以不为实参赋值十四:面向对象:一种分析问题的方式,当你需要完成一个功能,就去找能够实现这个功能的对象。
对象来自于类。
而类来自于现实生活中需要模拟的对象1.封装:属性封装,方法,类,程序集都是封装2.继承3.多态十五:this:当前创建的对象是那一个,this就代表当前对象十六:类的对象的关系:1.类是用来描述事物的,是模型,是一个概念,它的成员:属性(描述的对象的特征)方法(描述的对象的行为)2.对象是类的实例,是具体的存在。
十七:构造函数:它就是构建类的对象用的。
一个特殊的方法返回值,重载,传递参数1.没有返回值,名称和类名一致,任何成员(除了构造函数)名称都不能和类名一致2.每一个类都会有一个默认的无参的构造函数。
3.构造函数不能像普通方法一样显示调用,只能创建对象的时候调用,以及子类显示的调用父类的构造函数4.如果人为添加了带参的构造函数,那么系统默认生成的无参构造函数会自动消失。
所以一般我们应该养成一个习惯:创建好一个类,立刻为其添加无参的构造函数。
5.构造函数也可以重载。
方法名称一致,参数不一致(类型不一致,个数不一致)十八:属性:对象的特征:1.属性的作用:封装字段,提供一种过滤的方式get是指获取(读取),set(赋值)2.属性的本质:两个方法Set() Get()3.属性封装的实现:value相当于一个隐藏的参数,它就是用户赋的值。
4.如果过滤:做验证:set{if (value> 0 &&value<= 100){age = value;}else{age = 18;}}5.自动属性:public int Age{get;set;}十九:继承1.如果子类拥有与父类重名的属性和方法的时候,子类的属性和方法会将父类的覆盖掉。
如果需要显示调用父类的成员,则需要使用base.不然会默认调用this.2.创建一个子类对象,默认先会调用父类的无参的构造函数。
如果父类没有无参的构造函数,会报错。
3.创建子类对象的时候,也可以指定调用父类的带参的构造函数。
Base4.子类会继承父类的所有成员,但是只能使用公共的,而私有成员不能使用。
5.继承有三大特性:a)单根性:一个类只能继承自另外一个类b)传递性:一个类是另外一个类的子类,也可能同时是另外一个子类的父类c)单向性:不能循环依赖二十:多态的实现:同一种操作,多种不同的相应。
1.声明父类变量,实例化子类对象2.父类创建虚方法,子类做重写。
---子类重写父类的方法3.虚方法提供了默认的实现,子类可以不重写,如果子类没有重写,那么就默认调用父提供的方法实现。
如果子类重写了,系统会自动判断子类类型,调用子类的重写方法-----这就是多态4.多态的核心在于:子类可以替换父类,原因:a)子类拥有父类所规范的所有属性和方法b)子类还可以拥有自己特定的属性和方法c)父类对象可以完成的功能子类对象都可以完成d)所以,子类可以替换父类。
如Person per=new Student();e)Per本质是一个子类对象,但是编译器不知道,所以per只能调用父类里面规范的成员。
如果做强制转换,则可以调用到子类成员。
5.如果需要系统自动判断类型,达到多态的目的需要做以下事情:a)实现继承---- 子类是父类b)父类中声明虚方法(抽象方法),子类做重写(override)c)声明父类变量,实例化子类对象/父类做为参数,传入子类对象。
6.多态实现了避免反复的判断才能达到的效果,这也是多态的好处。
方便以后的代码功能的扩展7.抽象方法:abstract:只是方法的声明,没有方法体,不能包含{},但是必须包含;8.抽象方法的特点:a)只有声明b)它必须在抽象类里面(抽象类里面不仅仅只包含抽象方法)c)所有子类必须重写父类的抽象方法,除非子类它也是抽象的,抽象类里面可以包含未实现的抽象方法。
d)抽象方法更多是一种规范,它规范了子类的行为。
---接口e)抽象类不能实例化。
9、多态的使用方式:1.声明父类变量,实例化子类对象---创建父类类型集合2.以父类做为方法的返回值,返回子类对象---简单工厂:用户需要频繁的得到不同的单个子类对象的时候3.以父类类型做为参数,传入子类对象10.如果父子类的方法参数不一样,那它是重载而不是重写。
11.重写要求方法的签名完全一致:访问类型一样,返回值类型一样,方法名称一样,方法的参数一样,只是方法体的实现过程不一样二十一:简单工厂:制作产品:根据用户的需要,每一次制作出一个产品publicstatic Operator CreateOperator(string type){Operator opt = null;if (type == "+"){opt = new OpAdd();}if (type == "-"){opt = new SubStract();}if (type == "*"){opt = new Multi();}if (type == "/"){opt = new Div();}return opt;}二十二:is/as1.is用来判断引用类型变量的变量是否是某一种类型2.as:来做强制转换,一般()转换,如果不成功,就会报异常,as如果转换不成功会返回NULL,以后,如果不想抛出异常,可以使用as二十三:软件设计中的几个原则:1.封装变化点2.开放封闭原则(对修改封闭,对扩展开放)---添加单独的功能—添加单独的方法;添加单独的角色---添加单独的类3.高内聚,低藕合---三层---EF MVC二十四:接口:1.接口本质就是一个抽象类,在接口里面就是声明一系列的属性,方法,索引器和事件。