C#的构造器以及内存状态

简介: C#的构造器以及内存状态

构造方法

有参构造方法使用总结

参数的类型和顺序同样需要和定义规范一直

有参数的构造方法可以让用户轻松选择使用何种方式完成对象的初始化工作

使用有参构造方法能够有效避免用户单个初始化对象属性的麻烦

如果想约束用户对象时必须完成某些属性的初始化工作,则可以去掉无参构造方法。

class Student{ //两个参数构造器 public Student(int stuId,string stuName){ this StudentId =stuId; this.StudentName=stuName; } //无参构造器 public Student(){
} //三个参数构造器 public Student(int stuId,string stuName, int age){ this StudentId =stuId; this.StudentName=stuName; this.Age=age; } }

构造方法PK实例方法

构造方法 用于对象的初始化,一个类中至少有一个构造方法 不能显示调用,只能在创建对象的时候,使用new来调用 构造方法不能有返回值 构造方法名称必须与类名一样 实例方法 用于表示对象能够干什么,一个类中可以没有任何实例方法 只能显示调用:对象名.方法名。 可以有返回值,没有时必须以void表示。 方法命名要有意义,一般是“动词+名词”形式,不能与类名相同,命名规范通常采用pascal命名法。 1.4 对象的销毁 对象的生命周期

对象在内存中不断的“生生死死”,具有生命周期。

对象在内存中的状态

正在引用:程序正在使用的对象 游离状态:没有引用的对象,已经使用完毕但是依然占据空间 垃圾回收机制

.NET虚拟机特有机制,自动运行,并检查对象的状态 发现对象不再引用时,会将其释放所占用的空间(销毁) 1.5 对象的数据类型 值类型数据变量在传递的时候是将自己复制一份,

static void Main (string[]args){ int a=50; int b=a; b+=5; }

1 2 3 4 5 引用数据类型(对象类型)

引用数据类型变量传递时,将自己内存地址赋给新变量

static void Main(string[]args){ Student objStu1=new Student(); Student objStu2=objStu1; objStu2.Age=25; }

1 2 3 4 5 2. 关键字 2.1 this关键字 当成员变量和局部变量重名时使用this区分 public

Student (int StudentId, string studentName) { this.studentId=studentId; this.studentName=studentName; }

1 2 3 4 5 this表示当前类的对象,用于访问该类成员变量或方法

public strign GetStudent(){ return string.Format{"姓名:{0} 学号:{1}",this.studentName,this.studentId} }

1 2 3 2.2 ref关键字 使用ref关键字可以将值类型按照引用方式传递

平时不建议使用

static void Main (string []args){ int a=10; int result=Square(ref a); Console.WriteLine("a的平方={0} a的值={1}",result,a); Console.ReadLine(); } static int Square(ref int num1){ num1=num1*num1; return num1; }

2.3 out关键字 使用out关键字可以让方法有多个返回值 不建议使用,多参数返回时,主要使用字典集合

static void Main(string[] args)         {             int a = 10;             int square = 0;             int result = Operation(a, out square);             Console.WriteLine("a的平方={0 }a的立方={1}",square,result);             Console.ReadLine();         }         static int Operation (int num1,out int square)         {             square = num1 * num1;             int result = num1 * num1 * num1;             return result;
相关文章
|
3月前
|
存储 Java C#
C# 中的值类型与引用类型:内存大小解析
C# 中的值类型与引用类型:内存大小解析
|
4月前
|
存储 C#
C# | 内存池
内存池可以复用已申请的内存空间,它在程序启动时预先分配一定数量的内存块,当你需要使用内存时,则会从内存池中分配一块空闲内存,也就是说并不是每次都会向系统申请一块新的内存空间。 同理,当你使用完一块内存空间后,并不是直接释放内存,而是将其归还到内存池中。内存池就是通过这样一借一还的方式避免了频繁地分配和释放内存,减少了内存碎片和系统开销,提高了程序的性能。
59 0
|
4月前
|
存储 Java C#
C# | 使用Memory<T>高效地读写内存数据
Memory<T>是什么? 它是一种可变大小、可读写的内存块,可以安全地暴露给用户代码进行操作。 为什么要使用Memory<T>? 使用它有许多好处。最主要的是善用它可以提高代码的性能。因为Memory<T>是可变的,所以我们可以直接在内存中操作数据,而不需要进行额外的拷贝操作。 使用Memory<T>还可以减少垃圾回收的压力,因为我们不需要创建新的对象来存储数据。 Memory<T>还可以与Span<T>和ReadOnlySpan<T>类型一起使用,这些类型可以方便地对数据进行访问和操作。
87 0
|
9月前
|
存储 Java C#
C# 垃圾回收机制(GC) 的概述 资源清理 内存管理
C# 垃圾回收机制(GC) 的概述 资源清理 内存管理
|
9月前
|
存储 C#
C# “值类型“和“引用类型“在内存的分配
C# “值类型“和“引用类型“在内存的分配
|
11月前
|
测试技术 C#
C#不通过byte[],直接对内存映射文件复制内存
C#不通过byte[],直接对内存映射文件复制内存
|
11月前
|
C#
关于C# halcon内存泄漏的研究
关于C# halcon内存泄漏的研究
|
SQL 关系型数据库 API
基于C#的ArcEngine二次开发37:循环查询过程的内存管理与性能优化(三)
基于C#的ArcEngine二次开发37:循环查询过程的内存管理与性能优化
基于C#的ArcEngine二次开发37:循环查询过程的内存管理与性能优化(三)
|
SQL 存储 安全
基于C#的ArcEngine二次开发37:循环查询过程的内存管理与性能优化(二)
基于C#的ArcEngine二次开发37:循环查询过程的内存管理与性能优化
|
存储 C#
基于C#的ArcEngine二次开发37:循环查询过程的内存管理与性能优化(一)
基于C#的ArcEngine二次开发37:循环查询过程的内存管理与性能优化