【学习笔记】C# 构造和析构

  • 构造方法

    • 构造方法是一个特殊的方法,负责初始化对象
    • 构造方法名必须和类名一致
    • 构造方法没有返回值,但可以有参数,能够重载
    • 构造方法可以不写,系统会自动为类添加一个无参的默认构造
    • 如果将构造方法设置为Private,就不能再使用此构造创建实例
  • 析构
    • 析构方法在对象销毁时调用,用于释放内存
    • 一个类只能有一个析构方法
    • 析构方法没有返回值和参数,不能进行重载
    • 析构方法由系统自动调用,不能手动调用
    • 析构方法没有修饰符
  •   

     1 using System;
     2
     3 namespace FunctionDemo2
     4 {
     5     public class Person
     6     {
     7         public string name;
     8         public int age;
     9         //构造方法-负责初始化对象
    10         //1.构造方法的方法名必须和类名一致
    11         //2.构造方法没有返回值,不需要写void
    12
    13         //3.构造方法能够添加参数
    14         public Person(string name, int age)
    15         {
    16             //初始化成员变量
    17             this.name = name;
    18             this.age = age;
    19             Console.WriteLine("构造");
    20         }
    21
    22         //4.构造方法允许重载
    23         public Person()
    24         {
    25             name = "Li";
    26             age = 14;
    27
    28         }
    29         //5.如果没有给类添加构造方法,系统会提供一个默认构造
    30         //6.如果我们将某个构造方法设为私有类,就不允许再通过这个构造创建对象
    31         //private Person()
    32         //{
    33
    34         //}
    35         //析构方法 - 在对象销毁时调用,用于释放内存
    36         //1. 每个类只能有一个析构方法
    37         //2. 析构方法不能有返回值
    38         //3. 析构方法不能有访问权限修饰符
    39         //4. 析构函数不能带有参数,更不能重载
    40         //5. 析构函数由系统自动调用,不能手动调用
    41         ~Person()
    42         {
    43             Console.WriteLine("析构");
    44         }
    45     }
    46     class Program
    47     {
    48         static void Main(string[] args)
    49         {
    50             //使用new关键字创建对象的时候,就已经调用了构造方法
    51             Person p = new Person("Li", 29);
    52             Console.WriteLine(p.name);
    53             Console.WriteLine(p.age);
    54
    55             Console.WriteLine("主函数结束,程序准备退出!");
    56
    57             //Person p2 = new Person();
    58             //Console.WriteLine(p2.name);
    59             //Console.WriteLine(p2.age);
    60
    61         }
    62     }
    63 }
时间: 2024-11-07 01:04:47

【学习笔记】C# 构造和析构的相关文章

Python学习笔记009_构造与析构

>>> # 魔法方法>>> >>> # 魔法方法总是被双下划线包围,例如 __init__>>> # 魔法方法是面向对象的Python的一切>>> # 魔法方法的“魔力”体现在它们总能够在适当的时候被自动调用>>> >>> # __init__(self[,...]) 相当于其它语言的构造方法,在类对象实例化时会被自动调用>>> # __init__方法的返回值是

jQuery源码学习笔记:构造jQuery对象

3.1源码结构: (function( window, undefined ) { var jQuery = (function() { // 构建jQuery对象 var jQuery = function( selector, context ) { return new jQuery.fn.init( selector, context, rootjQuery ); } // jQuery对象原型 jQuery.fn = jQuery.prototype = { constructor:

swift学习笔记(五)构造过程

构造过程是为了使用某个类.结构体或枚举类型的实例而进行的准备过程.在构造过程中,对每一个属性进行了初始值预设和其它必要的准备和初始化工作. 与OC相比,swift的构造函数.不须要返回值.同一时候,在类和结构体的构造过程中,必须对全部的存储类型属性,包括继承自父类的属性.赋予合适的初始值.存储类型值不能处于一个未知状态. 在对属性进行初始化过程中,有两种方法,第一:使用构造方法,第二:在定义属性时,直接赋予默认值. 当使用构造方法对属性赋值时,不会触发不论什么的属性观測器. 当一个属性总是使用同

Php面向对象学习笔记 – 构造、析构、对象赋值、克隆

Php面向对象学习笔记 – 构造.析构.对象赋值.克隆 class student { public  $stu_id;       // 定义成员变量 public  $stu_name; public  function sayName()   // 成员函数 { echo $this->stu_name;   // $this  访问该对象的成员变量 } } $stu = new  Student;      // 创建对象 $stu->stu_id = '0607001'; $stu-

Effective C++笔记:构造/析构/赋值运算

条款05:了解C++默默编写并调用哪些函数 默认构造函数.拷贝构造函数.拷贝赋值函数.析构函数构成了一个类的脊梁,只有良好的处理这些函数的定义才能保证类的设计良好性. 当我们没有人为的定义上面的几个函数时,编译器会给我们构造默认的. 当成员变量里有const对象或引用类型时,编译器会不能合成默认的拷贝赋值函数:当一个基类把它的拷贝赋值函数定义为private时,它的派生类也不无生成默认的拷贝赋值函数,因为它无法完成基类成份的赋值. 条款06:若不想使用编译器自动生成的函数,就该明确拒绝 将拷贝构

Lua学习笔记(三):表的构造

构造器是创建和初始化表的表达式.表是Lua特有的功能强大的东西.最简单的构造函数是{},用来创建一个空表.可以直接初始化数组: 1 days = {"Sunday", "Monday", "Tuesday", "Wednesday", 2 "Thursday", "Friday", "Saturday"} Lua将“Sunday”初始化days[1](第一个元素索引为

swift学习笔记(六)析构过程和使用闭包对属性进行默认值赋值

一.通过闭包和函数实现属性的默认值 当某个存储属性的默认值需要定制时,可以通过闭包或全局函数来为其提供定制的默认值. 注:全局函数结构体和枚举使用关键字static标注    函数则使用class关键字标注 当对一个属性使用闭包函数进行赋值时,每当此属性所述的类型被创建实例时,对应的闭包或函数会被调用,而他们的返回值会被作为属性的默认值. ESC: Class SomeCLass{ let someProperty:SomeType={ //给someProperty赋一个默认值 //返回一个与

C++语言笔记系列之十五——派生类、基类、子对象的构造和析构函数调用关系

例子 example 1 注:若一个基类同时派生出两个派生类,即两个派生类从同一个基类继承,那么系统将为每一个简历副本,每个派生类独立地使用自己的基类副本(比如基类中有属于自己类的静态变量等). #include <iostream.h> class Person { public: person() {cout<<"Construction of person."<<endl;} ~person() {cout<<"Destr

Effective C++_笔记_条款09_绝不在构造和析构过程中调用virtual函数

(整理自Effctive C++,转载请注明.整理者:华科小涛@http://www.cnblogs.com/hust-ghtao/) 为方便采用书上的例子,先提出问题,在说解决方案. 1 问题 1: class Transaction{ 2: public: 3: Transaction(); 4: virtual void LogTransaction() const = 0 ; 5: ... 6: }; 7:  8: Transaction::Transaction() //Base cl

Swift学习笔记十四:构造(Initialization)

类和结构体在实例创建时,必须为所有存储型属性设置合适的初始值.存储型属性的值不能处于一个未知的状态. 你可以在构造器中为存储型属性赋初值,也可以在定义属性时为其设置默认值.以下章节将详细介绍这两种方法. 注意: 当你为存储型属性设置默认值或者在构造器中为其赋值时,它们的值是被直接设置的,不会触发任何属性观测器(property observers). 一.基本语法 class Human{ var name :String init(){ name = "human" } init(n