C# 对象和类型

C# 对象和类型

  • 类和结构的区别
  • 类成员
    • 数据成员
    • 函数成员
  • 按值和引用传送参数
  • 构造函数和静态构造函数
  • 方法重载
  • 只读字段
  • 部分类
  • 静态类
  • Object类

类和结构的区别

类和结构实际上都是创建对象的模板,每个对象都包含数据,并提供了处理和访问数据的方法。
类定义了每个类对象(称为实例)可以包含什么数据和功能。
定Person类

class PersonClass
{public string FirstName;public string LastName;
}

结构与类的区别是它们在内存中的存储方式(类是存储在堆(heap)上的引用类型,而结构是存储在堆栈(stack)上的值类型)、访问方式和一些特征(如结构不支持继承)。较小的数据类型使用结构可提高性能。但在语法上,结构与类非常相似,主要的区别是使用关键字 struct 代替 class 来声明结构。

struct PersonStruct
{public int age;public string name;
}

对于类和结构,都使用关键字 new 来声明实例:这个关键字创建对象并对其进行初始化。在下面
的例子中,类和结构的字段值都默认为 0

PersonClass P1 = new PersonClass();
PersonStruct P2 = new PersonStruct();

类成员

类中的数据和函数称为类的成员。Microsoft 的正式术语对数据成员和函数成员进行了区分。除了这些成员外,类还可以包含嵌套的类型(例如其他类)。类中的所有成员都可以声明为 public(此时可以在类的外部直接访问它们)或 private(此时,它们只能由类中的其他代码来访问)。与 Visual Basic、C++和 Java 一样,C#在这个方面还有变化,例如 protected(表示成员仅能由该成员所在的类及其派生类访问)

数据成员

数据成员包含了类的数据-- 字段、常量和事件。数据成员可以是静态数据(与整个类相关)或实例数据(类的每个实例都有它自己的数据副本)。通常,对于面向对象的语言,类成员总是实例成员,除非用 static 进行了显式的声明。

PersonClass P1 = new PersonClass();
P1.FirstName = "song";

常量与类的关联方式同变量与类的关联方式一样。使用 const 关键字来声明常量。如果它们声明
为 public,就可以在类的外部访问。

class PersonClass
{public const string Day = "Monday";public string FirstName;public string LastName;
}

函数成员

函数成员提供了操作类中数据的某些功能,包括方法、属性、构造函数和终结器(finalizer)、运算
符以及索引器。
方法是与某个类相关的函数,它们可以是实例方法,也可以是静态方法。实例方法处理类的某个
实例,静态方法提供了更一般的功能,不需要实例化一个类(例如 Console. WriteLine()方法)。

  • 方法的声明
    访问修饰符 返回值类型 方法名 () { 函数体 }
    public bool max(int a, int b)
    {
    return a > b?a:b;
    }
  • 方法的调用
    C#中调用方法的语法与 C++和 Java 中的一样。
    类.方法(参数);
  • 方法的参数传递
    参数可以通过引用或值传递给方法。

按值和引用传送参数

  • ref 参数
    函数执行后会改变参数的原值
    方法定义:static void SomeFunction(int[] ints, ref int i)
    方法调用:SomeFunction(ints, ref i);调用

  • out 参数
    在 C 风格的语言中,函数常常能从一个例程中输出多个值,这是使用输出参数实现的,只要把输出值赋给通过引用传递给方法的变量即可。通常,变量通过引用传送的初值是不重要的,这些值会被函数重写,函数甚至从来没有使用过它们。编译器使用 out 关键字来初始化。在方法的输入参数前面加上 out 关键字时,传递给该方法的变量可以不初始化。该变量通过引用传送,所以在从被调用的方法中返回时,方法对该变量进行的任何改变都会保留下来。在调用该方法时,还需要使用 out 关键字,与在定义该方法时一样:
    方法定义:static void SomeFunction(out int i);
    方法调用:SomeFunction(out i); 调用

  • 属性
    属性(property)不太常见,因为它们表示的概念是 C#从 Visual Basic 中提取的,而不是从C++/Java中提取的。属性的概念是:它是一个方法或一对方法,在客户机代码看来,它们是一个字段。

    public string SomeProperty
    {get{return "This is the property value";}set{// do whatever needs to be done to set the property}
    }
    
    • 只读和只写属性
      在属性定义中省略 set 访问器,就可以创建只读属性。同样,在属性定义中省略 get 访问器,就可以创建只写属性。但是,这是不好的编程方式,因为这可能会使客户机代码的作者感到迷惑。

    • 属性的访问修饰符
      C#允许给属性的 get 和 set 访问器设置不同的访问修饰符,所以属性可以有公共的 get 访问器和私有或受保护的 set 访问器。这有助于控制属性的设置方式或时间。在下面的例子中,注意 set 访问器有一个私有访问修饰符,而 get 访问器没有任何访问修饰符。这表示 get 访问器具有属性的访问级别。在 get 和 set 访问器中,必须有一个具备属性的访问级别。如果 get 访问器的访问级别是 protected,就会产生一个编译错误,因为这会使两个访问器的访问级别都不是属性。

    • 自动实现的属性
      如果属性的 set 和 get 访问器中没有任何逻辑,就可以使用自动实现的属性。这种属性会自动实现基础成员变量。
      public string ForeName {get; set;}
      public string ForeName {get; }
      public string ForeName {get; private set;}

构造函数和静态构造函数

在C#中声明基本构造函数的语法与在Java 和C++中相同。下面声明一个与包含的类同名的方法,
但该方法没有返回类型:
无参构造函数:

	public class MyClass{public MyClass(){}// }

有参构造函数:

	public class MyClass{private int number;public MyClass(int number){this.number = number;}}

可以把构造函数定义为 private 或 protected,这样不相关的类就不能访问它们

public class MyClass{private int number;private MyClass(int number){this.number = number;	}}

静态构造函数
C#的一个新特征是也可以给类编写无参数的静态构造函数。这种构造函数只执行一次,而前面的构造函数是实例构造函数,只要创建类的对象,它都会执行。编写静态构造函数的一个原因是,类有一些静态字段或属性,需要在第一次使用类之前,从外部源中初始化这些静态字段和属性。

	public class MyClass{static MyClass(){// 初始化代码}		}

方法重载

方法的返回类值类型不同,或参数个数不同,或参数类型不同即可以实现方法重载
public int max(int a, int b)
public int max(int a, int b, int c)
public float max(float a, float b)

只读字段

常量的概念就是一个包含不能修改的值的变量,常量是 C#与大多数编程语言共有的。但是,常
量不必满足所有的要求。有时可能需要一些变量,其值不应改变,但在运行之前其值是未知的。C#为这种情形提供了另一个类型的变量:只读字段。readonly 关键字比 const 灵活得多,允许把一个字段设置为常量,但可以执行一些运算,以确定它的初始值。其规则是可以在构造函数中给只读字段赋值,但不能在其他地方赋值。只读字段还可以是一个实例字段,而不是静态字段,类的每个实例可以有不同的值。与 const 字段不同,如果要把只读字段设置为静态,就必须显式声明。

public class DocumentEditor
{public static readonly uint MaxDocuments;static DocumentEditor(){MaxDocuments = DosomethingToFindOutMaxNumber();}}

部分类

partial 关键字允许把类、结构或接口放在多个文件中。
// Part1.cs

partial class PartClass
{public void MethodOne(){}
}

// Part2.cs

partial class PartClass
{public void MethodTwo(){}
}

静态类

静态类在功能上与使用私有静态构造函数创建的类相同。不能创建静态类的实例。使用 static 关键字,编译器可以检查以后是否给该类添加了实例成员。
静态类不需要示例化,即可进行调用

static class StaticClass
{public static void HelperMethod(){}
}
// 调用静态类静态方法
StaticClass.HelperMethod();

Object类

所有的.NET 类都派生于 System.Object。实际上,如果在定义类时没有指定基类,编
译器就会自动假定这个类派生于 Object。
System.Object 方法

  • ToString()方法:是获取对象的字符串表示的一种便捷方式。
  • GetHashTable()方法:如果对象放在名为映射(也称为散列表或字典)的数据结构中,就可以使用
    这个方法。
  • Equals()(两个版本)和 ReferenceEquals()方法
  • Finalize()方法:它最接近 C++风格的析构函数,在引用对象被回收,以清理资源时调用。
  • GetType()方法:这个方法返回从 System.Type 派生的类的一个实例。
  • MemberwiseClone()方法:它在概念上相当简单,只是复制对象,返回一个对副本的引用(对于值类型,就是一个装箱的引用)。

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

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

相关文章

外壳防护等级的最低要求

声明 本文是学习GB-T 3027-2012 船用白炽照明灯具. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了船用白炽照明灯具(以下简称灯具)的要求、试验方法、检验规则、标识、包装和储 存等。 本标准适用于电源电压在250V 以下的交流…

Linux 下 Mysql 的安装与卸载

文章目录 Mysql 安装安装服务安装客户端设置远程连接进入 mysql使用 mysql库查看用户表更新用户表强制刷新权限重启mysql服务其他 设置mysql的字符编码找到[mysqld_safe],在底下添加红色标记的字符添加server编码在底下添加红色标记的字符找到[mysql] 在底下添加红色…

巨人互动|Facebook海外户Facebook的特点优势

Facebook作为全球最大的社交媒体平台之一,同时也是最受欢迎的社交网站之一,Facebook具有许多独特的特点和优势。本文小编将说一些关于Facebook的特点及优势。 1、全球化 Facebook拥有数十亿的全球用户,覆盖了几乎所有国家和地区。这使得人们…

layui 树状控件tree优化

先上效果图: 我选的组件是这个: 动态渲染完后,分别在窗体加载完成,节点点击事件分别加入js: //侧边栏图标替换//layui-icon-subtraction$(function () {$(".layui-icon-file").addClass("backs&quo…

Ffmpeg-(1)-安装:ubuntu系统安装Ffmpeg应用

1、下载源码压缩包 https://ffmpeg.org/download.html 点击Download Source Code下载即可 解压: tar -xvjf ffmpeg-snapshot.tar.bz2 得到:ffmpeg目录 cd ffmpeg 或者:直接下 wget http://www.ffmpeg.org/releases/ffmpeg-5.1.tar.gztar -zx…

在EXCEL中构建加载项之创建加载项的目的及规范要求

【分享成果,随喜正能量】一句南无阿弥陀佛,本是释迦牟尼佛所证的无上正等正觉法,洒在娑婆世界的众生海中,只为末世众生能够以信愿之心抓住此救命稻草,要知道今世人此生的处境,可能只剩这道要么极乐要么三涂…

【华为云云耀云服务器L实例评测】- 云原生实践,快捷部署人才招聘平台容器化技术方案!

🤵‍♂️ 个人主页: AI_magician 📡主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。 👨‍💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!&…

数据结构与算法(C语言版)P8---树、二叉树、森林

【本节目标】 树概念及结构。二叉树概念及结构。二叉树常见OJ题练习。 1、树概念及结构 1.1、树的概念 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一颗倒挂的树&#xf…

208.Flink(三):窗口的使用,处理函数的使用

目录 一、窗口 1.窗口的概念 2.窗口的分类 (1)按照驱动类型分 (2)按照窗口分配数据的规则分类 3.窗口api概览 (1)按键分区(Keyed)和非按键分区(Non-Keyed) *1)按键分区窗口(Keyed Windows) *2)非按键分区(Non-Keyed Windows) (2)代码中窗口API的调…

泽众APM性能监控软件

泽众Application Performance Management(简称APM)是一款专业的性能监控工具,可以对全链路如Web服务器、应用服务器、数据库服务器等进行实时监控,并以图表化的形式直观地呈现监控数据,为系统性能优化和定位问题提供准…

gcc编译webrtc x64

gcc使用Ubuntu系统已经有的gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04) 1、下载离线版webrtc(也可以翻墙下载webrtc) 百度云链接: 链接: https://pan.baidu.com/s/1oHVz9bxXlW3Q6uO996c5XA 提取码: ojbs 2、下载gn https://github.com/timnieder…

【面试题精讲】Java超过long类型的数据如何表示

有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj.top 首发博客地址[1] 面试题手册[2] 系列文章地址[3] 在 Java 中,如果需要表示超过 long 类型范围的数据,可以使用 BigInteger 类…

Caddy Web服务器深度解析与对比:Caddy vs. Nginx vs. Apache

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

基于SpringBoot的大学生就业招聘系统的设计与实现

目录 前言 一、技术栈 二、系统功能介绍 求职信息管理 首页 招聘信息管理 岗位申请管理 岗位分类 企业管理 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着信息互联网信息的飞速发展,大学生就业成为一个难题,好多公司都舍不…

最新AI写作系统ChatGPT源码/支持GPT4.0+GPT联网提问/支持ai绘画Midjourney+Prompt应用+MJ以图生图+思维导图生成

一、智能创作系统 SparkAi创作系统是基于国外很火的ChatGPT进行开发的Ai智能问答系统。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作ChatGPT?小编这里写一个详细图文教程吧&…

【IPC 通信】信号处理接口 Signal API(6)

收发信号思想是 Linux 程序设计特性之一,一个信号可以认为是一种软中断,通过用来向进程通知异步事件。 本文讲述的 信号处理内容源自 Linux man。本文主要对各 API 进行详细介绍,从而更好的理解信号编程。 kill(2) 遵循 POSIX.1 - 2008 1.库 …

git权限不够:Ask a project Owner or Maintainer to create a default branch

新仓库还未创建任何分支时,Developer角色时首次提交代码,抛如下异常 remote: GitLab: remote: A default branch (e.g. master) does not yet exist for galaxy/apache-jspf-project remote: Ask a project Owner or Maintainer to cre…

leetcode做题笔记154. 寻找旋转排序数组中的最小值 II

已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组。例如,原数组 nums [0,1,4,4,5,6,7] 在变化后可能得到: 若旋转 4 次,则可以得到 [4,5,6,7,0,1,4]若旋转 7 次&#xff0…

使用光纤激光切割机等激光切割设备时的一些小诀窍

光纤激光切割机极大地提高了钣金加工行业切割效果和生产效率。然而在我们对客户的回访调查中,发现客户普遍存在着对光纤激光切割机设备的保养维护意识不足的问题,这严重影响了设备的正常使用和使用寿命。 虽然激光切割机有日常的保养,但是也需…

jvm垃圾收集算法

简介 由于《分代收集理论》和不同垃圾收集算法,Java堆应该被划分为不同区域,一般至少会把Java堆划分为新生代(Young Generation)和老年代(Old Generation)两个区域。 垃圾收集器可以只回收其中某一个或者…