C# 学习之路(类的基本概念)

news2024/9/23 19:18:52

C# 学习之路(类的基本概念)


  • 类的概述

类是一种活动的数据结构

程序的数据和功能被组织为逻辑上相关的数据项和函数封装的集合,并称为类

类包含数据成员和函数成员:

数据成员:存储与类或类的实例相关的数据(类体内的变量,字段

函数成员:执行代码,通常会模拟类所表示的现实世界事物的功能和操作(类体内的函数,方法

一个 C# 类可以有任意的数目的数据成员和成员函数。成员可以是 9 种成员类型的任意组合

在这里插入图片描述

  • 声明类

类的声明定义新类的特征和成员。它并不创建类的实例,但创建用于创建实例的模板。类的声明提供下列内容:

  • 类的名称
  • 类的成员
  • 类的特征
关键字  类名
class MyExcellentClass
{
    成员声明
}
  • 类成员

字段和方法是最重要的的类成员类型。字段是数据成员,方法是函数成员。

  • 字段

字段是隶属于类的变量

可以是任何类型,无论是预定义类型还是用户定义类型

和所有变量一样,字段是用来保存数据的(可以被写入和读取)

class  MyClass
{
 类型  字段名
 int MyField; 
}

C# 在类型的外部不能声明全局变量,所有的变量都必须在类型声明内部声明

  • 显示和隐式字段初始化

因为字段属于变量,所以字段的初始化和变量的初始化相同。

字段初始化是字段声明的一部分

初始化值必须是编译时可确定的

如果没有初始化语句,字段的值会被编译器设为默认值,默认值由字段的类型决定。(每种值类型的默认值为 0,但 bool 的默认值为 false,引用类型的默认值为 null)

class MyClass
{
 int i1, i2 = 3;
 double d1;
 string s1;
}

Console.WriteLine($"i1 = {i1}, i2 = {i2}, d1 = {d1}, s1 = {s1}");

//输出 (s1 为 null 所以没有输出)
i1 = 0, i2 = 3, d1 = 0, s1 =
  • 声明多个字段

可以通过用逗号分隔名称的方式,在同一条语句种声明多个相同类型的字段。

int F1 = 1, F3;
string F2 = "abc";
  • 方法

方法是具有名称的可执行代码块,可以从程序的很多不同地方执行,甚至从其他程序中执行。

当方法被调用时,它执行自己所含的代码,然后返回到调用它的代码并继续执行调用代码。(和C++的函数类似)

声明方法包括以下组成部分:

返回类型:声明方法返回值的类型(int、double、void…)

名称:方法名

参数列表:由一对空的圆括号组成,如果有参数,将被列在圆括号里

方法体:由一对大括号组成,大括号内包含执行代码

class SimpleClass
{
 返回值 参数列表
 void PrintNums(){
     Console.WriteLine("1");
 }
}

C# 没有全局函数

  • 创建变量和类的实例

类的声明只是用于创建类的实例的蓝图,一旦类被声明,就可以创建类的实例。

类是引用类型,所以需要为数据引用和实际数据都申请内存

数据的引用保存在一个类类型的变量中,要创建类的实例,需要从声明一个类类型的变量开始

class Dealer
{
    ......
}

class Program
{
    static void Main()
    {
        Dealer theDealer; //声明Dealer类型的变量theDealer,因为没有初始化,所以值是未定义
    }
}

  • 为数据分配内存

声明类类型的变量所分配的内存是用来保存引用的,而不是用来保存类对象实际数据的。要为实际数据分配内存,需要使用 new 运算符。

  1. new 运算符为任意指定类型的实例分配并初始化内存

  2. 使用 new 运算组成一个对象创建表达式,如下所示:

    2.1 关键字 new

    2.2 要分配内存实例的类型名称

    2.3 成对的圆括号

    关键字 类型名 圆括号
    new TypeName()
    
  3. 如果将内存分配给一个引用类型,则对象创建表达式返回一个引用,指向堆中被分配并初始化的对象实例

class Dealer
{
    ......
}

class Program
{
    static void Main()
    {
        Dealer theDealer = new Dealer(); 
    }
}

  • 实例成员

类声明相当于蓝图,通过这个蓝图想创建多少个类的实例都是可以的。

  • 实例成员:类的每个实例都是不同的实体,有着自己的一组数据,不同于同类的其它实例
  • 静态成员:实例成员是默认类型,但也可声明与类而不是实例相关的成员
  • 访问修饰符

类的内部,任何函数成员都可以使用名称访问类中的任意其它成员

访问修饰符是成员声明的可选部分,指明程序的其它部分任何访问成员。下面是字段和方法声明的语法:

字段:访问修饰符 类型 标识符;

public int k = 0;

方法:访问修饰符 返回类型 方法名(){…}

static void Program
{
    .......
}

5 种成员访问控制

私有的(private)共有的(public)受保护的(protected)内部的(internal)受保护内部的(protected internal)
  • 私有成员和共有成员

私有成员只能从声明它的类的内部访问,其它的类看不见或无法访问他们。

  1. 私有访问是默认的访问级别,如果一个成员在声明是不带访问修饰符,那就是私有成员
  2. 可以使用 private 访问修饰符显示地将一个成员声明为私有,隐式声明(不带访问修饰符)和显式声明(用 private)私有成员两种形式是等价的
int MyInt1; // 隐式声明私有
private int MyInt2; // 显示声明私有

实例的公有成员可以被访问。共有成员必须使用 public 访问修饰符指定。

public int Myint;
  • 公有访问和私有访问图示
  1. 类成员为类框中的小标签框
  2. 私有成员完全封闭在他们的类框中
  3. 公有成员有一部分伸出它们的类框之外
class Program
{
    int Member1;
    private Member2;
    public Menber3;
}

在这里插入图片描述

  • 成员访问实例
class C1
{
    int F1;		//隐式私有字段
    private int F2; 	//显示私有字段
    public int F3;		//公有字段
    void DoCalc()		//隐式私有方法
    {
        ......
    }
    public int GetVal() //公有方法
    {
        ......
    }
}

在这里插入图片描述

  • 从类的内部访问成员

    class MyClass
    {
        // 字段
        int I1 = 17, I2 = 1;;
        float F1 = 10;
        public string k = "abc";
        
        // 方法
        int Addval()
        {
            I1 += I2; // 访问私有字段
            return I1;
        }

        public void Getval()
        {
            Console.WriteLine("{0}", Addval()); // 访问私有方法
        }

        public float Avx()
        {
            Console.WriteLine($"{k}");
            return F1 * I1;
        }
    }
  • 从类的外部访问成员

要从类的外部访问实例成员,必须包括变量名称和成员名称,中间用点(.)分隔。这称为点运算符

MyClass myClass = new MyClass();
float fValue = myClass.Avx();

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/68920.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux条件变量

一、条件变量函数 1,条件变量 条件变量:用来描述某种临界资源是否就绪的一种数据化描述。通常要配合mutex一起使用。 2,初始化 pthread_connd_init: 同样有一个静态的和一个动态的。 其中cond是需要初始化的条件变量,attr传…

在线书法培训迎来新风口

随着社会教育水平的不断提高,书法不再是独属于某个年龄层的爱好,开始被越来越多人欣赏和重视。 写一手好字,对每一个人来说都是一个加分“外挂”。在考场上,一手好字无疑可以让阅卷老师在心中自然加分;在职场中&#…

源码深度解析之 Spring IOC

1. 基础知识 1.1 什么是 Spring IOC ? IOC 不是一种技术,只是一种思想,一个重要的面向对象编程的法则,它能指导我们如何设计出松耦合、更优良的程序。 传统应用程序都是由我们在类内部主动创建依赖对象,从而导致类与…

Vue--》自定义指令的使用讲解

目录 自定义指令 自定义指令的分类 私有自定义指令: 全局自定义指令: 总结 自定义指令 vue官方提供了v-text、v-for、v-model、v-if等常用的指令,还允许开发者自定义指令。 自定义指令的分类 私有自定义指令: 在每个vue组…

[附源码]计算机毕业设计框架的食品安全监督平台的设计与实现Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

u-BOOT启动流程

1、u-boot入口:入口即第一行程序,程序的链接是由链接脚本决定的,编译uboot之后,可以在根目录下生成u-boot.lds文件 打开lds文件可以看到代码当前入口点: :_start,_start后面就是中断向量表&…

[附源码]Python计算机毕业设计Django演唱会门票售卖系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

股票接口怎样获取数据方便?

目前很多交易者对股票数据行情查询相关使用的系统也是很普遍,就比如说你查询A股的大秦铁路可以使用实时股票数据接口来获取它的实时股价,成交量,成交金额等情况。那么在这个过程中,股票接口是如何获取数据更方便呢?小编…

化工厂人员定位系统:聚焦化工安全问题,提升智慧管理水平

化工厂人员定位系统,以人员定位技术为核心,整合访客管理、出入口控制、地图、人脸识别、视频监控数据采集等各种管控技术,提供精准实时定位、轨迹查询、货物跟踪等功能,又称“智能化二道门人员管理系统”。 12月1日,鞍…

[附源码]计算机毕业设计剧本杀交流分享平台Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Spring进阶(二十一)之循环Bean详解

目录 什么是循环依赖 检测是否存在循环依赖 Spring底层是如何解决循环依赖的问题 循环依赖无法解决的情况 为什么需要用3级缓存 问题 原因 案例 单例bean解决了循环依赖,还存在什么问题 什么是循环依赖 这个很好理解,多个bean之间相互依赖&#…

Python制作进度条,原来有这么多方法

如果你之前没用过进度条,八成是觉得它会增加不必要的复杂性或者很难维护,其实不然。要加一个进度条其实只需要几行代码。 在这几行代码中,我们可以看看如何在命令行脚本以及 PySimpleGUI UI 中添加进度条。 下文将介绍 4 个常用的 Python 进度…

TL431介绍及其应用电路

TL431介绍及其应用电路 硬件攻城狮 1. TL431简介 TL431是常用的三端并联稳压器,具有较好的热稳定性,输出电压可以设置为Vref~36V之间的任何值。被广泛用作基准源、比较器、运放等功能。在隔离电源中,TL431经常与光耦配合构成隔离反馈回路&…

PDF文件怎么合并?看完这篇就懂了!

不知道小伙伴们有没有这样的经历,那就是准备好一些pdf去打印店打印的时候,本来想要打印双面的,但是店家却表示pdf太小,只能一页一页的单页打印。这就给我们的钱包无形之中增加了很多的负担,因为有时候我们没必要打印单…

搜索与图论-有向图的拓扑序列

文章目录一、有向图的拓扑序列1. 拓扑序列2. 拓扑排序3. 如何进行拓扑排序4. 拓扑排序具体实现详见例题有向图的拓扑序列二、有向图的拓扑序列例题——有向图的拓扑序列具体实现1. 样例演示2. 实现思路3. 代码注解4. 实现代码一、有向图的拓扑序列 有向图的拓扑序列就是图的广…

遥感测深方法综述(二)CZMIL 机载LiDAR 测深系统

机载激光雷达测深测量是集激光测距、GNSS定位/姿态测量、航空摄影等多种技术于一体的新型主动机载激光测绘,可应用于海滩和海岸线、浅海编图、海岛、岛礁、水下障碍物的调查,是高效获取高精度近岸海底地形的重要技术,尤其对“人下不去、船上不…

31_ADC基本原理及单次采集实验

目录 ADC简介 STM32F10x ADC特点 ADC执行模式 相关寄存器及数据对齐方式 ADC的采样时间 常用库函数 单次转换一般步骤 实验源码 ADC简介 Analog-to-Digital Converter的缩写。指模/数转换器或者模拟/数字转换器。是指将连续变量的模拟信号转换为离散的数字信号的器件。…

Hylicos --- krprint实现

可变参函数的工作原理 函数调用时先用寄存器R0 ~R3 存放参数,如果不够放还要使用到堆栈,参数列表的形参从右到左依次入栈,弹栈时就是从左到右的顺序。 如果函数参数的个数固定,编译器就可以很清楚地在函数运行时依次从堆栈中弹出…

关于城市旅游的HTML网页设计 HTML+CSS上海博物馆网站 dreamweaver作业静态HTML网页设计 html网页制作期末大作业

👨‍🎓静态网站的编写主要是用 HTML DⅣV CSSJS等来完成页面的排版设计👩‍🎓,一般的网页作业需要融入以下知识点:div布局、浮动定位、高级css、表格、表单及验证、js轮播图、音频视频Fash的应用、uli、下拉…

JVM--这一篇就够了

1、JVM内存模型 Java内存模型是指Java虚拟机的内存模型,我们来看下Java内存模型的图片: 其中,在JAVA的JVM调优中,我们JAVA程序员需要重点关注的,首先是堆,我们看下堆内存的内存模型: 2、类的加载过程 (1)、加载 …