C#基础补充

简介: C#基础补充

C#基础补充

A.对值类型的分配。
虚拟内存中存在一个叫堆栈的区域,我们并不知道它到底在地址空间的什么地方,在一般开发过程中也没有必要知道,我们知道的是值类型就分配于此。值类型在堆栈上分配的时候,是自上而下填充的,也就是从高内存地址开始填充。
比如当前的堆栈指针为100000,这表明它的下一个自由存储空间从99999开始,当我们在C#中声明一个int类型的变量A,因为int类型是四个字节,所以它将分配在99996到99999这个存储单元中。如果我们接着声明double变量B(8字节),该变量将分配在99988到99995这个存储单元。 如果代码运行到他们的作用域之外,这时候A和B两个变量都将被删除,此时的顺序正好相反,先删除变量B,同时堆栈指针会递增8,也就是重新指向到99996这个位置;接下来删除变量A,堆栈指针重新指向10000。如果两个变量是同时声明的。如int A,B,此时我们并不知道A和B的分配顺序,但是编译器会确保他们的删除顺序正好和分配顺序相反。

B.对引用类型的分配。
了解堆栈上的分配方式之后,很明显,它的性能相当高,同时我们也发现了它的一个缺点:变量的生存期必须嵌套。这对于某些情况来说是无法接受的,有时候我们需要存储一些数据并且在方法退出后仍然能保证这部分数据是可以使用的。为此,虚拟内存另外分配了一部分区域,我们称之为托管堆。托管堆和传统的堆很大的一个不同点在于,托管堆在垃圾收集器的控制下进行工作。引用类型就分配在托管堆上,下面我们来看看引用类型的分配过程。
假设我们需要声明一个Person类并对它进行实例化。
Person p = new Person();
首先, 系统会在堆栈上给p这个变量在堆栈上分配存储空间,当然它只是一个引用而已,用来存放Person实例在托管堆上的位置,并没有存放真正的Person实例。因为它仅仅是存放一个地址(一个整数值),所以它将在堆栈上占据4个字节的空间。接下来Person实例将会被存放在托管堆上。和堆栈不同,托管堆是由下往上分配的,假设这个实例需要占据10个字节,假设托管堆上的地址为200000,那么它将分配在200000到200009这个存储单元。
需要注意的是,这个分配和实例的大小有关,如果实例小于85000字节,它会被分配在托管堆。如果超过了85000字节,它将被分配在LOH上 。

C#语言不支持多重继承。

1.4.3 结构类型
结构类型和类一样,可以声明构造函数、数据成员、方法、属性等。结构和类的最根本的区别是结构是值类型,类是引用类型。和类不同,结构不能从另外一个结构或者类派生,本身也不能被继承,因此不能定义抽象结构,结构成员也不能被访问权限控制字protected修饰,也不能用virtual和abstract修饰结构方法。在结构中不能定义析构函数。虽然结构不能从类和结构派生,可是结构能够继承接口,结构继承接口的方法和类继承接口的方法基本一致。下面例子定义一个点结构point:

using System;
struct point//结构定义
{
        
    public int x,y;//结构中也可以声明构造函数和方法,变量不能赋初值
}
class Test
{
    
    static void Main()
    {
    
        point P1;
        P1.x=166;
        P1.y=111;
        point P2;
        P2=P1;//值传递,使P2.x=166,P2.y=111
        point P3=new point();//用new生成结构变量P3,P3仍为值类型变量
    }//用new生成结构变量P3仅表示调用默认构造函数,使x=y==0。
}
修饰符:

一个 访问修饰符 定义了一个类成员的范围和可见性。C# 支持的访问修饰符如下所示:

  • public:所有对象都可以访问;
  • private:对象本身在对象内部可以访问;
  • protected:只有该类对象及其子类对象可以访问
  • internal:同一个程序集的对象可以访问;
  • protected internal:访问限于当前程序集或派生自包含类的类型。

using的用法:

1. using指令:引入命名空间

这是最常见的用法,例如:

using System;
using Namespace1.SubNameSpace;

2. using static 指令:指定无需指定类型名称即可访问其静态成员的类型

using static System.Math;var = PI; // 直接使用System.Math.PI

3. 起别名

using Project = PC.MyCompany.Project;

4. using语句:将实例与代码绑定

using (Font font3 = new Font("Arial", 10.0f),
            font4 = new Font("Arial", 10.0f))
{
    // Use font3 and font4.
}

代码段结束时,自动调用font3和font4的Dispose方法,释放实例。

关于构造函数的补充:

对于父类与子类来讲,子类在调用构造函数时会首先调用父类构造函数再调用子类构造函数。同样的,如果是多次继承,那么后面的子类调用构造函数时会从最上面的父类的构造函数开始调用一次往下,直到自己的构造函数。

枚举
C# 枚举学习需要注意:

System.Enum 类型是所有枚举类型的抽象基类(它是一种与枚举类型的基础类型不同的独特类型),并且从 System.Enum 继承的成员在任何枚举类型中都可用。存在从任何枚举类型到System.Enum 的装箱转换,并且存在从 System.Enum 到任何枚举类型的取消装箱转换。System.Enum 本身不是枚举类型。相反,它是一个类类型,所有枚举类型都是从它派生的。类型 System.Enum 从类型 System.ValueType派生,而后者又从类型 object 派生。在运行时,类型 System.Enum 的值可以是 null 或是对任何枚举类型的装了箱的值的引用。

目录
相关文章
|
Python
利用Python判断一个数是否为素数
利用Python判断一个数是否为素数
743 0
|
10月前
|
人工智能 算法 API
谈谈玩美移动 AI API 的技术路径与落地能力
玩美移动凭借多年美妆科技积累,打造稳定、可控的AI API服务,覆盖虚拟试妆、肤质分析、AI换装等场景。其多模态技术体系融合高精度人脸关键点、皮肤纹理建模与3D结构预测,结合商业化落地经验,实现跨设备、跨光线的高质量图像处理。模型幻象率低,结果一致性高,已广泛服务于全球品牌与零售商。
578 5
|
10月前
|
消息中间件 存储 人工智能
官宣上线!RocketMQ for AI:企业级 AI 应用异步通信首选方案
RocketMQ推出专为AI场景优化的LiteTopic模型,助力企业应对AI应用长耗时、高算力成本与流量波动等挑战,支持异步通信、会话连续性与资源高效调度,已在阿里云及集团内部落地验证。
423 0
官宣上线!RocketMQ for AI:企业级 AI 应用异步通信首选方案
|
10月前
|
人工智能 中间件 人机交互
数字人数字服务新技术
数字人技术正重塑人机交互,融合AI、图形学与语音合成,打造具备感知与决策能力的“数字生命体”。从医疗模拟到虚拟偶像,其应用广泛。
|
存储 NoSQL Java
分布式锁中的王者方案 - Redission
分布式锁中的王者方案 - Redission
396 1
|
人工智能 JavaScript Shell
零基础学MCP(2)| MCP 开发环境配置
2025最新实战指南,教你10分钟搭建支持Python与Node.js的跨平台MCP开发环境。涵盖环境配置、核心工具安装、双生态联动测试及常见问题解决方案,助你快速上手MCP开发。
|
XML Java Android开发
Android 动画之帧动画 + 补间动画 + 属性动画
本文介绍了Android开发中的三种动画类型:帧动画、补间动画和属性动画。帧动画通过依次播放一系列静态图片实现动态效果,支持Java代码与XML两种实现方式。补间动画基于起始和结束位置自动生成过渡效果,涵盖透明度、位移、旋转、缩放及组合动画等多种形式,并可搭配插值器优化动画过程。属性动画则通过改变对象属性实现动画,支持透明度、位移、旋转、缩放及组合动画,灵活性更高且适用于更复杂的场景。文中提供了详细的代码示例,帮助开发者快速上手。
646 15
|
机器学习/深度学习 人工智能 监控
DiffuEraser:阿里通义实验室推出的视频修复模型,支持高清修复、时间一致性优化
DiffuEraser 是阿里通义实验室推出的基于稳定扩散模型的视频修复工具,能够生成丰富的细节并保持时间一致性,适用于电影修复、监控增强等场景。
1544 27
DiffuEraser:阿里通义实验室推出的视频修复模型,支持高清修复、时间一致性优化
|
存储 SQL NoSQL
【赵渝强老师】达梦数据库的逻辑存储结构
本文介绍了达梦数据库的存储结构,包括逻辑和物理存储两部分。逻辑存储结构由数据库(Database)、表空间(Tablespaces)、段(Segments)、簇(Cluster)和页(Page)组成。数据库是最大逻辑单元,包含所有表、索引等;表空间由数据文件组成,用于存储对象;段由簇构成,簇包含连续的数据页;页是最小存储单元。文中还提供了查询表空间、段和页大小的SQL语句,并附有视频讲解和示意图。
670 7
|
弹性计算 安全 网络安全
转发路由器 Transit Router(TR):实现企业级互联网络的灵活与可靠
转发路由器 Transit Router(简称“TR”)是地域范围内企业级核心转发网元,可为用户转发同地域或不同地域的网络实例间的流量,并支持在地域内定义灵活的互通、隔离、引流策略,帮助用户打造一张灵活、可靠、大规模的企业级互联网络。通过搭配云数据传输(简称“CDT”),用户可实现跨地域连接场景数据传输按流量计费的能力。

热门文章

最新文章