C#第一天
数据类型
- int //整数类型 只能存储整数
- double //小数类型 既能存储小数 也能存储整数
- string //字符串 用来存储多个文本,也可也存储空,需要用双引号
- string ss = “”;//可以存空
- char //字符类型 用来存储单个字符,最多最少只能有一个字符
- char = ‘男’;
- //金钱类型 值后面要加个m,精度28到29位有效位
- decimal money = 5000m;
命名空间
可以认为类是属于命名空间的
如果在当前项目中没有这个类的命名空间,需要我们手动的导入这个类所在的命名空间。
值类型 引用类型
1 | { |
写好了一个类之后,我们需要创建这个类的对象,那么,我们管创建这个类的对象过程称之为类的实例化。
使用关键字 new。
this:表示当前这个类的对象。
类是不占内存的,而对象是占内存的。
属性
属性的作用就是保护字段、对字段的赋值和取值进行限定。
属性的本质就是两个方法,一个叫get() 一个叫set()。
- Field(字段)
- Method(方法)
- Property(属性)
1
2
3
4
5public string Name
{
get { return _name;}
set { _name = value;}
}
static 静态和非静态的区别
- 在非静态类中,既可以有实例成员,也可以有静态成员
- 在调用实例成员的时候,需要使用对象名、实例成员;
- 在调用静态成员的时候,需要使用类名、静态成员名;
总结:静态成员 方法、字段、属性等 需要类名调用。如:Console.WriteLine();
非静态成员 需要对象调
.Net第七天笔记
不管是实参还是形参,都是在内存中开辟了空间的。
方法的功能一定要单一。
1 | GetMax(int n1,int n2) |
方法中最忌讳的就是出现提示用户输入的字眼。
out、ref、params
1、out参数
如果你在一个方法中,返回多个相同类型的值得时候,可以考虑返回一个数组。
但是,如果返回多个不同类型的值得时候,返回数组就不行了,那么这个时候,我们可以考虑使用out参数。
out参数就侧重于在一个方法中可以返回多个不同类型的值。
2、ref参数
能够将一个变量带入一个方法中进行改变,改变完成后,再将改变后的值带出方法。ref参数要求在方法外必须为其赋值,而方法内可以不赋值。
3、params可变参数
将实参列表中跟可变参数数组类型一致的元素都当作数组的元素去处理。
params可变参数必须是形参列表中的最后一个元素。
方法的重载
概念:方法的重载指的就是方法的名称相同,但是参数不同。
参数不同,分为两种情况
如果参数的个数相同,那么参数的类型就不能相同。
如果参数的类型相同,那么参数的个数就不能相同。
方法的重载跟返回值没有关系。
方法的递归
方法自己调用自己。
找出一个文件夹内所有的文件。
第九天
我们把这些具有相同属性和相同方法的对象进行进一步的封装,抽象出来 类这个概念,累就是个模子,确定了对象应该具有的属性和方法。
对象是根据类创建出来的。
类就是一个盖大楼的图纸 对象就是盖出来的大楼。
2、类
语法:
1 | [public] class 类名 |
字段:存储数据
存储多个值
方法:描述行为
写好一个类之后,我们需要创建这个类的对象,
那么,我们管创建这个类的对象的过程称之为类的实例化。
使用关键字 new
this:表示当前这个类的对象
结构的语法
1 | public struct PersonTwo |
结构的语法和类的语法很像,但是不是,因为不具备类的三个特征。
封装 继承 多态
3、属性
属性的作用就是保护字段、对字段的赋值和取值进行限定。
属性的本质就是两个方法,一个叫get()一个叫set()
Field字段
Method方法
Property属性
public:公开的公共的 在哪都能访问
private:私有的,只能在当前类的内部进行访问,出了这个类就访问不到了
5、
当我们创建好一个类的对象后,需要给这个对象的每个属性去赋值,
我们管这个过程称之为对象的初始化。
6、静态和非静态的区别
- 在非静态类中,既可以有实例成员,也可以有静态成员。
- 在调用实例成员的时候,需要使用对象名.实例成员
- 在调用静态成员的时候,需要使用类名.静态成员名
总结:静态成员必须使用类名去调用,而实例成员使用对象名去调用。
静态函数中,只能访问静态成员,不允许访问实例成员。
实例函数中,既可以使用静态成员,也可以使用实例成员。
静态类中只允许有静态成员,不允许有实例成员。
静态类不允许被实例化,创建对象也没用,调用的时候都是用类名去调用的。
使用:
如果你想要你的类当作一个“工具类”去使用,这个时候可以考虑将类写成静态成员。
静态类在整个项目中资源共享。
类是不占内存的,对象是占内存的
只有在程序全部结束之后,静态类才会释放资源。
堆 栈 静态存储区域
释放资源:GC Garbage Collection垃圾回收器
7、构造函数
作用:帮助我们初始化对象(给对象的每个属性依次的赋值)
构造函数是一个特殊的方法:
- 构造函数没有返回值,连void也不能写。
- 构造函数的名称必须跟类名一样。
创建对象的时候会执行构造函数
构造函数是可以有重载的
类当中会有一个默认的无参数的构造函数,当你写了一个新的构造函数之后,不管是有参数 还是无参数的,那个默认的无参数的构造函数都被干掉了。
8、new关键字
Person zsPerson=new Person();
new帮助我们做了三件事
析构函数
//当程序结束的时候 析构函数才执行
帮助我们释放资源
1 | ~Student() |
第十天
1、命名空间
可以认为类是属于命名空间的。
如果在当前项目中没有这个累的命名空间,需要我们手动的导入这个类所在的命名空间。
- 用鼠标去点
- alt+shift+F10
- 记住命名空间,手动的去引用
2、在一个项目中引用另一个项目的类
- 添加引用
- 引用命名空间
值类型和引用类型
区别:
1、值类型和引用类型在内存上存储的地方不一样。
2、在传递值类型和传递引用类型的时候,传递的方式不一样。
值类型我们称之为值传递,引用类型我们称之为引用传递。
我们学的值类型和引用类型:
值类型:int double bool char decimal struct enum
整数 小数 布尔类型 字符类型 金钱 结构 枚举
引用类型: string 自定义类 数组
存储:
值类型的值是存储在内存的栈当中。
引用类型的值是存储在内存的堆中
字符串
- 字符串的不可变性
当你给一个字符串重新赋值之后,老值并没有销毁,而是重新开辟一块空间存储新值。
当程序结束后,GC扫描整个内存,如果发现有的空间没有被指向,则立即把它销毁。 - 我们可以将字符串看作是char类型的一个只读数组
ToCharArray();
将字符串转换成char数组
new string(char[] chs):能够将char数组转换为字符串
字符串的连接+,两边只要有一个是字符串类型,另一个也会被自动转换成字符串类型
一切类型都可以调用.ToString()方法转换成字符串类型
字符串提供的各种方法
- Length:获取当前字符串中字符的个数
- ToUpper(): 将字符转换成大写形式
- ToLower():将字符串转换成小写形式
- Equals(lessonTwo,StringComparison.OrdinalIgnoreCase):比较两个字符串,
- Split():分割字符串,返回字符串类型的数组.
- Substring():解决字符串,在截取的时候包含要截取的那个位置.
- IndexOf():判断莱个字符串在字符串中第一次出现的位置,如果没有返回-1
- LastIndexof():判断某个字符串在字符串中最后一次出现的位置,如果没有同
- StartsWith():判断以. 开始
- EndsWith():判断以 .结束
- Replace():将字符串中某个字符串替换成一个新的字符串
- Contains():判断某个字符串是否包含指定的字符串
- Trim():去掉字符串中前后的空格
- TrimEnd():去掉字符串中结尾的空格
- Trimstart():去掉字符串中前面的空格
- string.IsNullOrEmpty):判断一个字符串是否为空或者为null
- string.Join():将数组按照指定的字符串连接,返回一个字符串.
5、继承
我们可能会在一些类中,写一些重复的成员,我们可以将这些重复的成员,单独的封装到一个类中,作为这些类的父类。
Student Teacher Driver 子类 派生类
Person 父类 基类
子类继承了父类,那么子类从父类那里继承过来了什么?
首先,子类继承了父类的属性和方法,但是子类并没有继承父类的私有字段。
问题:子类有没有继承父类的构造函数?
答:子类并没有继承父类的构造函数,但是。子类会默认的调用父类无参数的构造函数,创建父类对象,让子类可以使用父类中的成员。
所以,如果在父类中重新写了一个有参数的构造函数之后,那个无参数的就被干掉了,子类就调用不到了,所以子类会报错。
解决方法:
在在父类中重新写一个无参数的构造函数。
在子类中显示的调用父类的构造函数,使用关键字:base()
6、继承的特性
继承的单根性:一个子类只能有一个父类
继承的传递性
7、查看类图
8、object是所有类的基类。
十一天
1 里式转换
子类可以赋值给父类
如果父类中装的是子类对象,那么可以讲这个父类强转为子类对象。
2、
子类对象可以调用父类中的成员,但是父类对象永远都只能调用自己的成员。
3、
is: 表示类型转换,如果能够转换成功,则返回一个true,否则返回一个false。
as: 表示类型转换,如果能够准换则返回对应的对象,否则返回一个null
4、protected
受保护的:可以在当前类的内部以及该类的子类中访问。
5、ArrayList集合的长度问题
每次集合中实际包含的元素个数(count)超过了可以包含的元素的个数(capcity)的时候,集合就会像内存中申请多开辟一倍的空间,来保证集合的长度一直够用。