基础类型

所有类型都从System.Object派生出
CLR(运行时)要求所有的类型都要从System.Object类型去派生;那么得到一个结论就是不管是隐式派生or显示显式,这两个定义基本意义上是一致的;(PS:这里稍微提提什么隐式和显式,好吧举个栗子!定义一个类class)

//隐式//显式

继承System.Object后,在高版本(拿Vs2019作为演示IDE)的IDE里面,你会发现关键字颜色会变得浅色;So这个是可写可不写的(可简化的名称)一般不写;maybe讲到这里你对Object这个还是概念比较模糊;光标移到关键字处,IDE会弹出提示,这个是.Net FrameWork所有类的最终基类,它是类型层次的根;

所有类型都具有一组基本的行为 

Object 提供了一些公共的方法
Equals 返回的是bool值,当两个对象具有相同的值,则返回true;

GetHashCode 返回对象值得哈希码;

ToString 默认返回类型的完整名称(this.GetType().FullName)重写此方法返回对象的状态表示的String对象;

GetType 用此方法可得知对象是什么类型的,常用于在反射,获取对象的类型以及元数据的一些信息,GetType()也是一个非虚的方法,主要是为了防止类的重写从而隐瞒其类型,进而破坏类型的安全性;

Object 提供的受保护方法(不常用):
MemberwiseClone 这个非虚方法创建类型的新实例,返回新实例的引用,与this对象的实例字段完全一致;
Finalize垃圾回收之后,对象内存被实际回收之前会调用此方法(PS:之后再去理解托管堆和垃圾回收)
关于我们在面向对象语言中,常见的New这个关键字
写个C# 的样例:
定义了一个calss,里面做了个简单的控制台输出

当我们要使用它的时候,往往要这么做(以控制台应用程序作为样例)在Static void Main()方法中对class A将它实例化出来,然后再调用Class A中的draw()方法

(PS:效果就不多说了,无非就在控制台上输出了字母A)

*以下主要要讲的就关于new 操作符在这当中到底做了那些事情?

计算所有类型中所有实例字段的字节数;在堆上,每个对象都需要一些额外的成 员(称为overhead成员,也称为“开销成员”);包括 类型的指针对象(type of pointer)&& 同步块索引(sync block index)。在CLR(运行时)利用这些去管理对象;,同时刚刚提到的那些成员也要计入对象的大小;
在堆中分配对象的类型要求的字节数,对象的内存,所有字节默认都是设为0
初始化对象的“类型对象指针” 和 “同步索引块”这两个,也就第一点提到的成员;
调用类型的“构造器”最终调用的是 System.object 的构造器,在此构造器中,它什么也不做,只是一个简单的返回;因为大多数类型都会在自己的构造器中自动生成代码来调用基类的构造器。

总结:
New关键字执行完了这些操作之后,返回指向一个新建的对象引用(有些语言称为指针)前面的样例代码里,该引用保存到变量 a 中;
还有个疑问就是,有人会觉得,既然能实例出一个对象,那么在C#里面会不会有一个反义词,反向操作,把实例出的对象,删除掉对象delete之类的;抱歉,这个是没有提供的,但在CLR中,它采用了垃圾回收机制,能自动监测到一个对象不被使用或者被访问,并自动去释放对象的内存;从而做到节省性能;

关于System.String类型
在需许多各式各样的程序中,System.String都是运用得最多的类型之一;一个String着一个不可变的顺序字符集;当然,String也是从Object中直接派生出来的,(PS:前面有提到,所有类型的基类),So他当然是个引用类型鸭!,既然是引用类型,String对象(字符数组)它也肯定存在与堆上啦;这辈子都不会跑到线程栈中,着也涉及到“运行时的相互关系”;

String 类型实现了那些接口呢?
IComparable/IComparable<String>
ICloneable
IConvertible
IEnumerable/IEnumberable<Char>
IEquatable<String>
构造字符串
很多编程语言里(包括在讨论的C#中)String都将视为基元类型,基元类型的意思就是说,在源代码中允许直接使用字面值字符串,我们的IDE编译器会将这些字符串放到模块的元数据中,运行时加载和一你用它们;
但是有一点C#里是不允许new操作符用字面值去构造String对象的;这点最好的理解,可以理解为:你写完的时IDE会直接报错,根本编译不通过,证明这种写法是不用OK的啦;(写个测试样例我们去更好的消化)

在控制台中写了个输出字符串“HI”的Demo,很明显发现,这时我们的VS IDE,已经报错,证明这样的写法不是合法的;

相反,必须要使用一下简化语法
结合文字,从根本的理解 System.String的一些使用场景;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值