1.类与对象的关系
类是对一类事务的统称,是抽象的,不能拿来直接使用,比如汽车,没有具体指哪一辆汽车
对象是一个具体存在的,看的见,摸得着的,可以拿来直接使用,比如我家的那辆刚刚买的新汽车,就是具体的对象
对象是根据类这个模板创建出来的,类里面有哪些特性或者功能对象里面也有,多不得,少不得

2.new 一个对象做了哪些事情?
Person person = new Person();new是一个运算符
(1)在内存中开辟一块合适大小的空间
(2)在这个空间里创建对象
(3)调用这个对象的构造函数
(4)返回这个空间的引用地址

3.访问修饰符
类的访问修饰符只有public和internal,内部类的访问修饰符可以为private

4.属性
属性的本质是一个get和一个set方法,而set方法中定义了一个参数名称为value,所以我们可以在set方法中访问value
属性就是对字段的封装
属性本身不存值,值是存在属性封装的对应的字段中
只要类中的字段要被外界访问,就需要把这个字段封装为属性

5.构造函数
(1)构造函数访问修饰符一般情况下是public,没有返回值,方法的名称与类名相同
(2)构造函数在创建这个对象的时候被自动调用,程序员无法手动调用
(3)构造函数有什么用?如果我们希望在创建这个类的对象的同时需要执行一些代码,我们就可以将这些代码写到构造函数中
(4)this关键字代表当前对象,当前运行在内存中的那一个对象,this关键字可以调用其他的构造函数
(5)构造函数调用构造函数:
public Dog(int age,string name):this(age)
{

}
public Dog(int age)
{

}
调用的时候:Dog dog = new Dog(2,"旺财");程序会先调用Dog(int age)构造函数,然后在调用Dog(int age,string name)构造函数
(6)隐式构造函数:如果程序员没有为类手动添加构造函数,C#编译器在编译的时候会自动添加一个无参数的构造函数
如果添加了构造函数,C#编译器在编译的时候则不会添加

6.常量和只读变量
(1)const修饰的数据叫做常量,
常量一旦声明常量的值就不能改变,因为C#编译器在编译的时候声明常量的那句代码不见了,在使用常量的地方就用常量的值替换了
比如
const string name = "小明";
Console.WriteLine(name);
编译之后变为
Console.WriteLine("小明");所以不能赋值

readonly修饰的变量只读变量
readonly string name = "小明";
public Person()
{

}
编译后
readonly string name ;
public Person()
{
this.name = "小明";
}
const和readonly的区别:
const不能修改值,readonly只能在构造函数中修改值
const在编译的时候就要确定值,readonly在运行时要确定值

7.枚举
枚举是一个值类型,每一个枚举成员都对应了一个整型的数值,这个数值默认是从0开始递增
枚举和int类型转换:int a = (int)Direction.South; int i = 2; Direction d = (Direction)i;
枚举和string类型转换:string str = "South"; Direction d = (Direction)Enum.Parse(typeof(Direction),str,true); //true表示忽略

大小写
枚举值所对应的数值默认是int类型的,可以在枚举的名字后面加一个冒号来指定这个数值的类型,只能是整型的(byte,short。。。)
如:
enum Direction:byte
{

}
好处:限定变量的取值范围,在编码过程中不容易出错

8.结构struct
(1)结构中可以定义字段、属性、方法、构造函数,也可以通过new关键字来创建对象
(2)无参数的构造函数无论如何C#编译器都会自动生成,所以我们不能显示的声明无参数的构造函数
(3)在构造函数中必须要为结构体的所有的字段赋值
(4)在构造函数中为属性赋值,不认为是对字段赋值,因为属性不一定是去操作字段
(5)结构是一个值类型,在传递结构变量的时候,会将结构对象里面的每一个字段复制一份,然后拷贝到新的对象中
(6)不能定义自动属性,因为自动属性会生成一个字段,而这个字段必须要求在构造函数中,而我们又不知道这个字段
(7)声明结构体对象可以不new关键字,但是这个时候结构体对象的字段没有初始值,因为没有调用构造函数,而构造函数中必须为字段赋

值,所以通过new关键字创建的结构体对象的字段就有默认值。
(8)当我们要表示一个轻量级的对象的时候,就可以定位结构以提高速度。根据传值的影响来选择,希望传引用就定义为类,希望传拷贝就

定义为结构

9.垃圾回收
托管代码:被CLR管理的代码
非托管代码:不被CLR管理的代码
应用程序域:当。net应用程序在CLR中运行的时候,CLR会创建一个单独的应用程序域,让。net应用程序在应用程序域中运行
分配在栈空间的变量一旦执行完其所在的作用域(即"{ }"中),这个变量就会CLR立即回收
分配在堆里面的对象没有任何对象引用的时候,这个对象就被标记为“垃圾对象”,等待垃圾回收期回收。
GC会定时的清理堆空间中的垃圾对象,GC清理垃圾对象的频率程序员无法决定,由CLR自动控制
当一个对象被标记为“垃圾对象”的时候,这个对象不一定立即被回收
垃圾回收运行机制:
垃圾回收会根据应用程序的运行情况来使用合适的算法,其中一种算法如下:
CLR会预先开辟一块空间,当创建对象的时候会放在第0代的内存中,当第0代的空间满的时候,GC开始回收第0代,不被标记垃圾的对象会移

动到第1代内存中,然后第0代空间变为空,当再次创建对象的时候会存储在第0代空间,一直这样重复,第1代空间不满的时候不会回收。当

第1代空间满的时候,会垃圾回收第1代,然后把老的对象移动到第1代,新对象存储在第0代。第1代到第2代是和第0代到第1代一样,当三代

都满的时候会报异常说内存溢出

GC.GetGeneration(p)获取指定对象是属于第几代,总共有3代,从0开始,0,1,2
GC.Collect();立即让垃圾回收器对所有的代进行垃圾回收
GC.Collect(0);表示对第0代回收GC.Collect(1);表示对第0代和第1代回收

Person p = new Person();
GC.GetGeneration(p);值为0
GC.Collect();
GC.GetGeneration(p);值为1
GC.Collect();
GC.GetGeneration(p);值为2
GC.Collect();
GC.GetGeneration(p);值为2
10.析构函数
析构函数不能有访问修饰符,不能有参数,所有不能被继承或重载,在对象被垃圾回收器回收的时候,析构函数被GC自动调用,当没有垃圾

对象的时候不会被调用,
执行一些清理善后的操作
~Person()
{

}
11.静态成员
(1)在这个类第一次被加载的时候,这个类下面所有的静态成员会被加载,静态成员是属于类的,实例成员是属于对象的
(2)静态成员只能被创建一次,所以静态成员只有一份,实例成员有多少个对象就创建多少次
(3)静态成员被创建在静态存储区中,一旦创建直到程序退出才会被回收
(4)什么时候定义为静态的?变量需要被共享的时候,方法需要被反复调用的时候
(5)静态方法中不能直接调用实例成员,因为静态方法被调用的时候,对象有可能没有创建
(6)this/base关键字在静态方法中不能使用,因为有可能对象不存在
(7)在实例方法中可以调用静态成员,因为这个时候静态成员肯定存在
静态成员和实例成员区别:
(1)生命周期不同,静态成员在程序退出时才会被回收,实例成员则在该对象被垃圾回收器回收时才会被回收
(2)存储的位置不同,静态成员存储在静态存储区中,实例成员存储在堆的对象里面

12.静态类
(1)静态类中只能声明静态成员
(2)静态类中不能有实例构造函数
(3)静态类中不能被实例化,因为没有实例成员,实例化无意义
(4)静态类不能被继承,因为本质是一个抽象的密封类,所以不能被继承也不能被实例化
(5)如果一个类下面的所有成员都需要被共享,那么就可以把这个类定义为静态类
(6)不能声明一个静态类的变量,比如静态类Person p;
静态构造函数:非静态类也可以有静态构造函数
静态类的成员第一次被访问之前就会执行静态构造函数
静态构造函数只被执行一次

.net学习之类与对象、new关键字、构造函数、常量和只读变量、枚举、结构、垃圾回收、静态成员、静态类等的更多相关文章

  1. 2016/3/21 面向对象: ①定义类 ②实例化对象 ③$this关键字 ④构造函数 ⑤析构函数 ⑥封装 ⑦继承

    一:定义类   二:实例化对象 //定义类 class Ren { var $name; var $sex; var $age; function Say() { echo "{$this- ...

  2. c#学习系列之字段(静态,常量,只读)

    C#静态变量使用 static 修饰符进行声明,在类被实例化时创建,通过类进行访问不带有 static 修饰符声明的变量称做非静态变量.static变量在对象被实例化时创建,通过对象进行访问一个类的所 ...

  3. Java垃圾回收学习笔记

    通常来说,要写Java代码,你基本上都没必要听说垃圾回收这个概念的.这不,对于已经写了5年多Java代码的我来说,我还没有哪次经历说是需要使用垃圾回收方面的知识来解决问题的.但是,我依然督促自己花了几 ...

  4. 牛客网Java刷题知识点之垃圾回收算法过程、哪些内存需要回收、被标记需要清除对象的自我救赎、对象将根据存活的时间被分为:年轻代、年老代(Old Generation)、永久代、垃圾回收器的分类

    不多说,直接上干货! 首先,大家要搞清楚,java里的内存是怎么分配的.详细见 牛客网Java刷题知识点之内存的划分(寄存器.本地方法区.方法区.栈内存和堆内存) 哪些内存需要回收 其实,一般是对堆内 ...

  5. JVM学习——垃圾回收GC(学习过程)

    JVM学习-垃圾回收(GC) 2020年02月19日06:03:56,开始学习垃圾回收,学习资料来源(张龙老师的JVM课程) JVM内存数据区域知识复习 学习垃圾回收之前,要对JVM内部的内存区域有详 ...

  6. 【转】Java学习---垃圾回收算法与 JVM 垃圾回收器综述

    [原文]https://www.toutiao.com/i6593931841462338062/ 垃圾回收算法与 JVM 垃圾回收器综述 我们常说的垃圾回收算法可以分为两部分:对象的查找算法与真正的 ...

  7. python对象销毁(垃圾回收)

    Python 使用了引用计数这一简单技术来跟踪和回收垃圾. 在 Python 内部记录着所有使用中的对象各有多少引用. 一个内部跟踪变量,称为一个引用计数器. 当对象被创建时, 就创建了一个引用计数, ...

  8. C++学习5-面向对象编程基础(构造函数、转换构造、静态数据成员、静态成员函数、友元)

    知识点学习 类 const作用 C语言的const限定符的含义为"一个不能改变值的变量",C++的const限定符的含义为"一个有类型描述的常量": const ...

  9. php面向对象学习笔记01-面向对象介绍、构造函数、析构函数

    偶尔翻看以前的笔记.就整理下.方便以后的查阅 类-成员属性 成员属性是从某个事务提取出来的, 可以是基本数据类型,也可以是复合数据类型(数组,对象) //创建一个类 class Cat{ pubic ...

随机推荐

  1. 初学Hibernate持久化

    hibernate三种持久化对象状态:(持久化对象:Persistent Object=POJO + hbm映射) 1.瞬时状态(临时状态或自由态):PO对象刚创建(即new)开始进入瞬时状态,此时对 ...

  2. codejumper的跳转代码

    public void JumpToSource(vsCMPart location = vsCMPart.vsCMPartNavigate) { TextPoint startPoint = Ori ...

  3. PHP中is_numeric函数十六进制绕过0day

    0×00 简介国内一部分CMS程序里面有用到过is_numberic函数,我们先看看这个函数的结构bool is_numeric ( mixed $var )如果 var 是数字和数字字符串则返回 T ...

  4. WebService学习总结(三)——使用JDK开发WebService

    一.WebService的开发手段 使用Java开发WebService时可以使用以下两种开发手段 1. 使用JDK开发(1.6及以上版本) 2.使用CXF框架开发(工作中) 二.使用JDK开发Web ...

  5. 转:this的用法

    this指针的含义及其用法: 1. this指针是一个隐含于每一个成员函数中的特殊指针.它指向正在被该成员函数操作的那个对象.2. 当对一个对象调用成员函数时,编译程序先将对象的地址赋给this指针, ...

  6. 使用python在SAE上搭建一个微信应用,使用有道翻译的api进行在线翻译

    1. 准备,先在使用python一步一步搭建微信公众平台(一)中基本实现自动回复的功能后,接着在有道词典上申请一个key,http://fanyi.youdao.com/openapi?path=da ...

  7. Java中Properties类的操作

    知识学而不用,就等于没用,到真正用到的时候还得重新再学.最近在看几款开源模拟器的源码,里面涉及到了很多关于Properties类的引用,由于Java已经好久没用了,而这些模拟器大多用Java来写,外加 ...

  8. [BZOJ1618][Usaco2008 Nov]Buying Hay 购买干草

    [BZOJ1618][Usaco2008 Nov]Buying Hay 购买干草 试题描述 约翰的干草库存已经告罄,他打算为奶牛们采购H(1≤H≤50000)磅干草. 他知道N(1≤N≤100)个干草 ...

  9. Android 云服务器的搭建和友盟APP自动更新功能的实现

    setContentView(R.layout.activity_splash); //Bmob SDK初始化--只需要这一段代码即可完成初始化 //请到Bmob官网(http://www.bmob. ...

  10. centos rm -rf 恢复删除的文件

    Linux有时候执行了 rm -rf 等操作误删了文件绝对是一件可怕的事情,好在有一些解决的办法可以临时救急.这时我们就要用到一款叫做extundelete的工具了. 目录[-] 依赖 安装 查找要恢 ...