zoukankan      html  css  js  c++  java
  • c#复习笔记 类与结构

    结构与类,类是存储在堆heap上的引用类型,结构是在栈stack上的值类型,结构不支持继承

    类:

    一、数据成员:字段,常量,事件的成员

    二、函数成员:方法、属性、构造函数、终结器(析构函数)、运算符重载、索引器。

    1】方法

    方法的申明[modifiers] return_type MethodName([parameters])

    {

    //method body

    return data ;//or void

    }

    参数可以通过引用传递和值传递传递给方法

    通过引用传递给方法的话,对象在方法内部发生的任何改变退出后任然有效(也就是传递的是指针)。

    通过值传递则不会这样,被调用的方法得到的变量的一个相同副本,也就是退出后原值不会发生改变。

    一些思考:其实被调用的方法都得到了一个副本,只不过引用方法得到了一个引用的副本,ps引用(也可以叫做别名)是值类型,所以我们可以这么理解,传入的形参其实都是值类型的副本。

    如果想改变值类型怎么办呢

    Refout out可以和c中的指针等效,因为都需要初始化值才能够使用,ref则需要初始化值就可以使用,out可以不初始化(请探讨out设计的目的,就是为了输出一个值,而ref是为了改变)

    重载:声明参数数量或者参数类型不同的就好。

    2】属性

    说白了。。就是两个变量和两个方法,两个变量:备用变量与value,方法get set

    声明方法就是比字段多了一个大括号

    原理:举例 属性 property 备用变量 _property 

    property被赋值——value被赋值为property的值(valueset方法中的局部变量)——执行set事件中的代码。

    当需要输出property的值时——执行get方法并且返回与之类型一样的变量

    为什么要有局部变量,因为valueset内部的局部变量,需要保留value的值,所以便有了备用变量,所以很多时候,set第一步_property=value

    (只读属性等,可以参照这两个方法的作用)

    【2.5】索引器

    出现这个的目的是为了更好地访问实例对象内部的数据,因为如此,所以必须是实例对象,而不能是静态对象。

    申明方法

    public int this[int a] 两个int均可更改。

    {get;

    set;}

    原理和属性是一样的

    使用方法 Person per=new Person(); Console.WriteLine(per[1]);per[1]=0;(不详细解释了,大致就是这个样子,内部也存在value这个东西!说白了。。和属性相比原理就是多传入了一个变量)

    3】构造函数

    初始化所有值之后执行构造函数,这里没有什么好解释的

    Ps静态构造函数

    (所有静态几乎都是一个道理。。。只执行一遍,并且在所有实例化执行之前执行)

    静态方法,也就是可以直接类名.调用的方法

    构造函数可以调用其他构造函数

    ps】只读字段

    Readonly,只能写一次

    匿名类型 var

    弱引用 使用WeakReference 

                WeakReference wangjiwr = new WeakReference(new property());

                property wangji = wangjiwr.Target as property;

                GC.Collect();

    当类特别大的时候可以使用,这样可以让垃圾回收管理器回收空间

    也是下次再调用的必须再次实例化一次

    Ps所谓强引用就是property wangji = wangjiwr.Target as property;,这样是不会被回收的。

    还有一个partial,就是可以在各个地方声明类的结构。

    ***结构***

    Struct 优势,不在托管堆上,存储在栈中或存储为内联(inline)也就是,结构是值类型

    所以,运行速度会快。

    劣势,不支持继承 but 继承于object

  • 相关阅读:
    mongo admin 客户端管理工具安装
    kong API gateway
    安装 docker管理 工具 页面 portainer
    elcipse 安装lombok插件解决 @Slf4j 等找不到log变量问题
    cqrs案例
    你还不知道这四点Mysql调优的话,那就赶快学起来
    python中的类型提示(type hint)
    大厂面试最常被问的Redis问题合集
    nginx gzip json [2]
    nginx gzip json 配置「1」
  • 原文地址:https://www.cnblogs.com/zuoguangxing/p/3603369.html
Copyright © 2011-2022 走看看