继续更新。。。接下来就是面向对象的知识了

1、面向对象:概念:使用面向对象的思想进行编程可以让的程序变得扩展性更高,便于维护;

我们在现实生活中去描述一个人的时候,通过描述这个人的特征和行为。
我们在编程当中,去描述一个对象的时候,通过描述这个对象的属性和方法。

对象时具体的,不是抽象的,一定是看得见摸得着的。

我们把一些具有相同属性和方法的对象进行进一步的抽象,提取出了"类"这个概念。
类就是模子,确定了对象将要拥有的属性和方法。

2、类:

  语法:

 

[访问修饰符] class 类名
{
成员;
......
}
访问修饰符:public,公开的,公共的,在哪都可以访问
class:是我们声明类的关键字
类名:要符合Pascal命名规范
成员:
字段、属性、方法。

总结:
1)、我们在写一个类的时候,需要在项目中新建一个类文件。
2)、在类中,默认的访问修饰符是private,表示私有的,只能在当前类的内部访问。
3)、在类中,我们现在可以写3种成员,字段,属性和方法
4)、我们写好了一个类之后,需要创建这个类的对象,叫做类的实例化
5)、类是不占内存的,但是对象时占内存的。
6)、自定义类,属于引用类型,我们的对象存储在内存的堆中。

3、属性:

1)、我们要求将类中所有的字段都标记为private,但是标记为private之后,类中的字段在外界没有办法被访问。
2)、并没有办法对字段的非法值进行处理
属性的出现解决了上面两个问题:
语法:
[访问修饰符] 属性类型 属性名
{
get{}
set{}
}
属性的出现了保护了字段,对字段的取值和设置进行了限定。
1)、在赋值的时候进行判断,也就是在set方法中
2)、在取值的时候进行判断,也就是在get方法中

属性中既有get也有set,我们叫做可读可写属性。
只有get叫做只读属性,意味着我们只能给属性取值,而不能对属性赋值。
只有set叫做只写属性,意味着我们只能给属性赋值,但是不能对属性取值。

4:关于this关键字的含义:

1)、代表当前这个类的对象。
2)、显示的调用本类的构造函数。

4.1:成员变量和局部变量

局部变量:方法中的成员都是局部变量。
成员变量:类中的变量
局部变量的作用域就是当前方法,而成员变量的作用域当前类。(上面的this很能说明这个)

小总结:

字段:存储数据
属性:保护字段,通过两个方法 get、set
方法:描述这个对象的行为
字段跟属性的关系:字段就是女人 属性就是男人(男人一般在外打交道,女人嘛。。。你懂得)

5、构造函数:构造函数其实就是一个特殊的方法,用来初始化对象。

eg:[public] class Person

{

}

[public] Person()

{

}

特殊有二:
1)、构造函数的名称跟类名一样。
2)、构造函数没有返回值。连void都没有。

注:

在类中,如果你不指定其他的构造函数,则会默认有一个无参数的构造函数。
当你写了一个新的构造函数后。不管这个新写的构造函数有参数还是没有参数,都会把原来那个
默认的无参数的构造函数干掉。

5.1关于new关键字的含义:

1)、在堆中开辟空间
2)、在开辟的堆空间中创建对象
3)、调用对象的构造函数进行初始化

4)、隐藏父类的成员

6、静态和非静态的区别

1)、被static标记的成员叫做静态成员,没有被static标记的成员叫做实例成员或者非静态成员。
2)、在一个非静态类中,既能出现静态成员,也能出现非静态成员。
3)、非静态成员需要使用对象去调用,而静态成员需要使用类名去调用。
4)、为什么对象不能去调用静态成员?
静态成员是随着程序的加载,就已经在内存中开辟空间的。
5)、静态方法中只允许使用静态成员,但是非静态方法中既可以使用静态成员也可以使用非静态成员。
6)、静态类中所有的成员都必须是静态成员。
7)、静态类不允许被创建对象,因为没有实际意义

6.1:为什么要使用静态类?

1)、当这个类被用作工具类的时候,可以考虑写成静态类。
Console con=new Console();
con.WriteLine();
Console.WriteLine();
2)、静态成员在整个项目中是资源共享的。

7、访问修饰符

public:公开的公共的,在哪都可以访问。
private:私有的,只能在当前类的内部访问,出了这个类就访问不到了
internal:表示只能在当前项目的内部进行访问,出了这个项目就访问不到了。

(总和5个访问修饰符 基本上用这3个就够了)

8、特殊的字符串

字符串对于我们而言是一个非常特殊的类型,特殊原因有二:
1)、字符串不可变性,我们每次对字符串重新赋值、拼接等操作,都会在内存中产生一个新的实例。
string s1="张三";
s1="李四";
2)、字符串可以看做是char类型的只读数组

8.1:字符串常用的方法:
ToCharArray():将字符串转换为char数组
new string(char[]):将char数组转换为字符串
Length:获得字符串的字符个数
ToUpper():将字符串转换为大写形式
ToLower():将字符串转换为小写形式
Equals():比较字符串,可以忽略字符串的大小写
Split():可以把我们在字符串中不想要的字符都切割出去

9、面向对象的3大特征:

9.1、封装:把程序当中重复出现的代码封装成了方法。(这个不用多说想必大家都已明白)

9.2、继承:继承可以解决类与类之间的冗余代码。

我们把类当中,所共有的成员,单独的封装一个类。 让其他类来继承这个类。

例如写了 Person 和 Student 2个类 ,Student类继承了Person类,那么我们管Student类称之为子类或者派生类。管Person类叫做父类或者基类。

子类继承了父类的属性和方法,并没有继承父类的私有字段。

注:子类并没有继承父类的构造函数,但是,子类会默认的调用父类无参数的构造函数。

为什么子类要去调用父类无参数的构造函数?
1)、我们可能会在父类无参数的构造函数当中对父类成员进行初始化
2)、因为子类需要使用父类的成员,需要创建父类的对象。

(如果我们在父类中新写了一个构造函数,这个时候会干掉父类那个默认的无参数的构造函数)解决办法:

1)、在父类中重新写一个无参数的构造函数
2)、显示的调用父类有参数的构造函数。使用关键字base

base跟this不一样:base代表父类的引用;this代表的是该类的对象。

注:子类可以使用父类的成员,但是父类永远只能使用自己的成员。

9.3、继承的两大特性:

1)、单根性:一个子类只能继承自一个父类。
2)、传递性:父类中的成员,可以一代一代的向下传递。

10、里氏转换:

两句话:

1、子类可以赋值给父类(如果有一个地方需要一个父类作为参数 我们可以传递一个子类)

eg:

class Person
{
public void PersonSayHello()
{
Console.WriteLine("我是父类");
}
}

class Student : Person
{
public void StudentSayHello()
{
Console.WriteLine("我是学生");
}
}

class Teacher : Person
{
public void TeacherSayHello()
{
Console.WriteLine("我是老师");
}
}

Student s = new Student();

Person p = new Student();

2、如果父类中装的是子类对象,那么可以将这个父类强值转换为对应的子类对象

eg:

Student s = (Student)p;

s.StudentSayHello();

10.1、is和as:is 和 as都表示类型转换。

is:如果转换成功,返回true,否则返回false

eg:

Person p = new Student();

if (p is Student)

{

  (Student)p).StudentSayHello();

}

else
{
   Console.WriteLine("转换失败");
}

as:如果转换成功,则返回对应的对象,否则返回null

eg:

Person p = new Student();

Student s = p as Student;
s.StudentSayHello();
Console.ReadKey();

C#基础总复习03的更多相关文章

  1. C#基础总复习02

    继续更新第二篇: 1:一元运算符:++ -- ++:不管是前加加还是后加加,变量的值最终都会自身加一. 前加加和后加加的区别体现在参与运算的时候,如果是后加加,则首先拿原值参与运算, 运算完成后再自身 ...

  2. C#基础总复习01

    马上就快毕业了,准备把这几个月所学到的知识梳理一下,这儿所写的都是一些C#中最基础的东西(大牛不要笑话我,这也是我记录的一些笔记等等),希望能帮到一些正在学习这方面的知识的人,如果有写的不对的地方,望 ...

  3. Day 20 python基础总复习

    一.计算机基础 1.1 计算机基础之编程 编程语言是人与计算机之间交流的介质 编程就是写一堆文件 编程为了奴隶计算机,解放劳动力 1.2 计算机组成原理 CPU 控制器:控制硬件 运算器:逻辑运算和算 ...

  4. .net基础总复习(2)

    第二天 文件操作常用类 File类   //操作文件的 //复制.剪切.创建.移除 //File.Create(@"C:\Users\BDSOFT\Desktop\new.txt" ...

  5. .net基础总复习(1)

    第一天 1.new关键字 (1) 创建对象 (2) 隐藏从父类那里继承过来的成员 2.访问修饰符 public: 公开的,公共的. private:私有的,只能在当前类的内部访问,类中的成员, 如果不 ...

  6. .net基础总复习(3)

    第三天 2.单例模式 1)  将构造函数私有化 2)  提供一个静态方法,返回一个对象 3)  创建一个单例 3.XML 可扩展的标记语言 XML:存储数据 注意: XML严格区分大小写,并且成对出现 ...

  7. EF6 在原有数据库中使用 CodeFirst 总复习(三、重建迁移)

    本来原来学的时候,挺顺利的,没想到再次使用,还是遇到很多问题,导致更新失败,所以,只能重建迁移,免得看着乱乱的. 一.删除迁移,将数据恢复到(一)结束状态 1.删除文件夹 2.删除表 3.删除列 4. ...

  8. EF6 在原有数据库中使用 CodeFirst 总复习(五、生成发帖页面)

    有点与在原有数据库中使用 CodeFirst 远了,不过是总复习吗,总得全面点. 一.在用户表(Users)中插入两个用户 二.生成发帖界面 MVC生成的界面很多,也没使用Ajax,实际开发中很少会使 ...

  9. JavaSE_ Java基础 总目录(1~6)

    JavaSE学习总结第01天_Java概述01.01 计算机概述01.02 计算机硬件和软件概述01.03 软件开发和计算机语言概述01.04 人机交互01.05 键盘功能键和快捷键01.06 如何打 ...

随机推荐

  1. 重装mysql步骤

    , 卸载MySQL 2, 删除目录 C:\Documents and Settings\All Users\Application Data\MySQL (这个真的有,原先没注意到,删掉!) 如果没有 ...

  2. BP神经网络分类器的设计

    1.BP神经网络训练过程论述 BP网络结构有3层:输入层.隐含层.输出层,如图1所示. 图1 三层BP网络结构 3层BP神经网络学习训练过程主要由4部分组成:输入模式顺传播(输入模式由输入层经隐含层向 ...

  3. Tyvj P1729 文艺平衡树 Splay

    题目: http://tyvj.cn/p/1729 P1729 文艺平衡树 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 此为平衡树系列第二道:文艺平衡树 ...

  4. algorithm@ KMP

    一. KMP算法 KMP算法是一种改进的字符串匹配算法,由D.E.Knuth与V.R.Pratt和J.H.Morris同时发现,简称KMP算法.KMP算法的关键是利用匹配失败后的信息,尽量减少模式串与 ...

  5. 使用WIF实现单点登录Part I——Windows Identity Foundation介绍及环境搭建 -摘自网络

    上个月有一个星期的时间都在研究asp.net mvc统一身份验证及单点登录的实现.经过了一番的探索,最终决定使用微软的Windows Identity Foundation.但是这东西用的人貌似不多, ...

  6. 【面试虐菜】—— Oracle知识整理《DBA的思想天空》

    Inventory Oracle安装工具OUI用来管理Oracle安装目录的   Oracle的参数文件,启动后按照下面的顺序读取参数文件,如果读取失败,启动数据库 失败: 1  $ORACLE_HO ...

  7. jbpm与spring hibernate struts整合

    applicationContext.xml <?xml version="1.0" encoding="UTF-8"?> <beans xm ...

  8. 服务框架HSF分析之一容器启动

    大家平时都在用这个服务框架.简单阅读了下代码,了解其原理可以方便解决一些常见hsf的问题.限于篇幅,整个分析将分几个系列发布.第一篇将简单介绍Hsf的启动和各组件之间关系. 一.  Hsf总体架构 这 ...

  9. ubuntu14.04如何卸载qq

    ubuntu安装了wine qq怎么去卸载呢?现在wine qq 比较好用的有ubuntukylin官网与deepin linux官网使用的deepin版本wine qq 2012国际版,还有Long ...

  10. 【16】成对使用new和delete时要采取相同形式

    简而言之,new时不带[],delete时也不带[]:new时带[],delete时也要带[].如果不匹配,要么造成多销毁对象,导致未定义行为:要么导致少销毁对象,导致内存泄漏.