从一般到特殊-C#中的对象

文章目录

  • 对象的概念
  • 对象的创建和使用
  • 匿名类型和初始化器
  • 构造函数和析构函数
    • 构造函数
    • 析构函数
    • 范例
  • 参数传递

  • 博主写作不容易,孩子需要您鼓励
  • 万水千山总是情 , 先点个赞行不行

对象的概念

类是具有相同特征一类事物的抽象,而对象是类的实例。
类和对象有本质的区别,类是从对象中抽取出来的一类对象的描述,对象是类中的个体,是一个具体的事物,创建对象就是从抽象到具体的过程,是将类的属性和行为实例化的过程。类与对象的关系可以比喻为设计手机和具体手机的关系,类就像手机机型设计一样说明了手机所应该具备的所有属性和功能,但是手机设计并不是手机;对象就是跟据手机设计而制造出来的手机,它具有手机的所有功能,能打电话发短信。

对象的创建和使用

类是抽象的,要使用类中非静态的成员,就必须创建类的对象,创建对象就是类的实例化过程。
C#使用new运算符创建对象。

  • 语法格式如下:
  • 类名 对象名 = new 类名(参数列表);
    

    其中,参数列表是可选的。
    如创建Phone类的一个对象如下:

    class PhoneClass{public string brand;public string type;}class Program{static void Main(string[] args){PhoneClass Phone = new PhoneClass();//创建Phone类的一个对象Phone.brand = "huawei";Phone.type = "5G";Console.WriteLine("手机品牌是:" + Phone.brand);Console.WriteLine("手机种类是:" + Phone.type);Console.ReadKey();}}
    

    对象的使用是通过访问对象中的非静态成员来实现的。

  • 访问对象中的非静态成员语法如下:
  • 对象名.成员名
    

    如Phone类的一个对象的使用如下:

    class PhoneClass{public string brand;public string type;}class Program{static void Main(string[] args){PhoneClass Phone = new PhoneClass();//创建Phone类的一个对象Phone.brand = "huawei";Phone.type = "5G";Console.WriteLine("手机品牌是:" + Phone.brand);//Phone对象的使用Console.WriteLine("手机种类是:" + Phone.type);//Phone对象的使用Console.ReadKey();}}
    

    匿名类型和初始化器

    匿名类型是C#3.0新增功能,能简化对象的初始值设置。使用对象初始化,创建类的对象并对其属性成员赋值。
    举例如下:

    PhoneClass Phone = new PhoneClass(){Phone.brand = "huawei"};
    

    例如定义类Point,有两个属性X,Y表示点的坐标

    public class Point               	 //定义Point类{                                // 类的属性定义中set,get可以简写为以下形式  public double X { get; set; }//定义属性X,点的横坐标public double Y { get; set; }//定义属性Y,点的纵坐标}
    

    使用对象初始化,可以这样创建对象并对属性赋值

    Point P = new Point() { X = 0.0, Y = 0.0 };     //创建对象P并对XY赋值
    

    使用匿名类型可以定义内嵌的类型,不需要显示的定义一个类型。假设没有定义Point类,却要使用一个Point的对象,可以使用对象初始化器,不用指定类名。
    例如:

    var p = new { X = 0.0, Y = 0.0 };   //创建匿名类型p,并使用对象初始化器赋值。
    

    构造函数和析构函数

    对象和客观世界的事物一样,从创建到消亡都有一个生命周期,对象的创建和销毁是通过类的构造函数和析构函数来完成的。

    构造函数

    构造函数是类的特殊方法成员,其名称和类名相同,主要用来完成对象的初始化。
    C#通过new创建对象的过程实际上就是调用类的构造函数的过程,创建对象时调用构造函数对对象进行初始化。每个类都有构造函数,如果没有定义,系统也会提供一个默认的构造函数,默认的构造函数一般不进行什么操作。在访问一个类的时候,系统最先执行构造函数中的语句。

    析构函数

    析构函数是对象销毁前释放所占用的系统资源的类的成员。析构函数的名字是在类名前加一个“~”符号。析构函数不接受任何参数,也不返回任何值。
    例如:

    public class Point               //定义Point类{                                // 类的属性定义中set,get可以简写为以下形式  Point(){//构造函数               //构造函数内容}~Point()                     //析构函数名{//析构函数               //析构函数内容}public double X { get; set; }//定义属性X,点的横坐标public double Y { get; set; }//定义属性Y,点的纵坐标}
    

    范例

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;namespace test
    {class Program{static void Main(string[] args){Point p1 = new Point();Console.WriteLine("无参数构造函数演示");Console.WriteLine("X:" + p1.X);Console.WriteLine("Y:" + p1.Y);Point p2 = new Point(2.0,3.0);Console.WriteLine("有参数构造函数演示");Console.WriteLine("X:" + p2.X);Console.WriteLine("Y:" + p2.Y);Console.ReadKey();}}public class Point               //定义Point类{                                // 类的属性定义中set,get可以简写为以下形式  public Point(){X = 0.0; Y = 2.0;//构造函数               //构造函数内容}public Point(double x,double y){X = x; Y = y;//构造函数               //构造函数内容}~Point()                     //析构函数名{Console.WriteLine("清理资源");//析构函数               //析构函数内容}public double X { get; set; }//定义属性X,点的横坐标public double Y { get; set; }//定义属性Y,点的纵坐标}
    }
    

    运行结果:
    在这里插入图片描述

    参数传递

    C#的许多方法成员是有参数的,定义方法时声明的参数是形式参数,调用方法时要给形式参数传值,传递方法的值是实参。C#有“值传递”和“引用传递”两种传递参数类型。值传递是C#默认的传递方式,使用值传递方式时,向形式参数传递实在参数的副本,方法内发生的对形式参数的更改对实在参数本身没有影响,就像文件的复印件一样,无论如何修改复印件,原件没有任何改变。如果希望所调用的方法能更改实在参数的值,则必须使用ref或out关键字声明通过引用传递方式传递参数,引用传递是把实在参数的地址传给形式参数,形式参数和实在参数指向同一个存储单元,对形式参数的改变就是对实在参数的改变。out与ref类似,二者的区别是,ref要求参数在传递之间必须初始化,out则不要求初始化。

    可参考文章:
    C#的两种类据类型:值类型和引用类型

    • 博主简介:
    • 工业自动化上位机软件工程师、机器视觉算法工程师、运动控制算法工程师。目前从业于智能制造自动化行业。 博主邮箱:2296776525@qq.com
    • 帮忙点个赞吧。哈哈。

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

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

相关文章

如何用面对对象来做一个躁动的小球?

今天来看看怎样用面对对象来做一个躁动的小球。 首先我们先创建一个对象&#xff0c;他的属性包含小球的随机水平、纵向坐标&#xff0c;随机宽、高&#xff0c;随机颜色&#xff0c;以及创建小球的方法。 html: <div id"wrap"></div> js:function Boll(…

关于MyEclipse项目的名字的修改对项目导入导出的影响

不要修改项目名字&#xff0c;不管是在MyEclipse中(.project文件里面的额name会变)还是在G:\MyEclipseData目录下(.project文件里面的额name不会变)&#xff0c;否则导入的时候不能访问&#xff0c;会出现400的错误&#xff0c;而访问的网址必须是以前没改名前的那个名字才可以…

Gcc详解以及静态库、动态库生成

[转] Gcc详解以及静态库、动态库生成 http://www.360doc.com/content/10/0619/14/1795182_33985297.shtml 1。gcc包含的c/c编译器 gcc,cc,c,g,gcc和cc是一样的&#xff0c;c和g是一样的&#xff0c;(没有看太明白前面这半句是什 么意思:))一般c程序就用gcc编译&#xff0c;c程序…

改变世界的七大NLP技术,你了解多少?(上)

什么是NLP&#xff1f; 自然语言处理&#xff08;NLP&#xff09; 是计算机科学&#xff0c;人工智能和语言学的交叉领域。目标是让计算机处理或“理解”自然语言&#xff0c;以执行语言翻译和问题回答等任务。 随着语音接口和聊天机器人的兴起&#xff0c;NLP正在成为信息时代…

MINI类-结构体

文章目录结构体的定义和使用实例类和结构体的关系博主写作不容易&#xff0c;孩子需要您鼓励 万水千山总是情 , 先点个赞行不行 结构体与类相似&#xff0c;通常用来封装小型的相关变量组&#xff0c;例如&#xff0c;学生的学号、姓名、性别、年龄等。结构是一种值类型&am…

由.def文件生成lib文件[转]

最近在学习curl库时&#xff0c;碰到一个问题&#xff0c;从官网上下载了一个lib版的&#xff0c;却发现只有.dll&#xff0c;没有lib文件&#xff0c;感觉很奇怪&#xff0c;google了之后才知道&#xff0c;原来库作者的用意是让用户自己生成lib文件&#xff0c;下载到的lib文…

union 和 union all 有什么不同?

假设我们有一个表 Student&#xff0c; 包括以下字段与数据&#xff1a;drop table student;create table student( idint primary key,name nvarchar2(50) not null,score number not null);insert into student values(1,Aaron,78);insert into student values(2,Bill,76);in…

暴风影音硬件加速播放高清影片

近年来&#xff0c;高清视频因为画面清晰、视觉效果好&#xff0c;越来越受到众多电脑用户的厚爱。暴风影音3.6版本在高清的支持上&#xff0c;笔者必须得说&#xff0c;是暴风影音在高清方面的一个大跨越&#xff0c;在这个技术上&#xff0c;暴风把KMP等播放器都远远的抛在后…

SSL双向认证的实现

2019独角兽企业重金招聘Python工程师标准>>> 环境 系统&#xff1a;archlinux/centOS nginx&#xff1a;nginx/1.12.2 浏览器&#xff1a;火狐firefox 前提&#xff1a;1.安装nginx。    2.安装openssl。 生成证书 新建工作目录 首先建立一个工作目录&#x…

partial 分部类-庞大类的瘦身计划

文章目录使用情况语法博主写作不容易&#xff0c;孩子需要您鼓励 万水千山总是情 , 先点个赞行不行 一般来说&#xff0c;一个类、结构或者接口位于一个源文件中&#xff0c;但是某些情况&#xff0c;比如大型项目、特殊部署时&#xff0c;可能需要把一个类、结构或者接口放…

scroll-view——小程序横向滚动

这是官方给的布局代码 <view class"section"><view class"section__title">vertical scroll</view><scroll-view scroll-y style"height: 200px;" bindscrolltoupper"upper" bindscrolltolower"lower"…

二期设计

电子锁管理 设备管理 设备管理 1 信息编辑;回收电子锁发放 电子锁初始化&#xff0c;发放 4 记录车辆在发车时使用的电子锁电子锁开锁联系人管理 电子锁开锁联系人管理 1 根据订单路线中的投点&#xff0c;设置每个投递点的开锁联系人&#xff0c;通过短信的方式下发给你开…

音视频同步系列文章之------时间戳与时间尺度(time scale)

根据一些文章我自己推敲了一下几个概念如下&#xff1a; 采样频率是每秒钟抽取声波幅度样本的次数。8000 帧率是每秒显示帧数。 20 时间戳单位&#xff1a;时间戳计算的单位不为秒之类的单位&#xff0c;而是由采样频率所代替的单位&#xff0c;这…

30秒无需编码完成一个REST API服务

JSON Server 30秒内无需编码快速完成一个模拟的REST API服务。 这个服务主要是给那些需要快速的模拟原型后端接口的前端人员使用的 GitHub&#xff1a;github.com/typicode/js… 安装 $ npm install -g json-server 复制代码Example 新建一个 db.json 文件 {"posts":…

namespace-C#命名空间

博主写作不容易&#xff0c;孩子需要您鼓励 万水千山总是情 , 先点个赞行不行 C#程序是利用命名空间组织起来的。命名空间既做程序的内部组织系统&#xff0c;又用做外部组织系统。就像一个国家为了便于管理&#xff0c;分成多个省份一样。 声明命名空间 命名空间是.NET …

NKU 专题一 题解

A - Flip Game 总的情况数只有2^16次方种&#xff0c;显然直接bfs就可以了 1 #include<iostream>2 #include<queue>3 #include<cstring>4 using namespace std;5 int W,B,start;6 bool have[1000000];7 struct plot{8 int n,step;9 }; 10 void input(int…

僵尸进程(转)

前面的文章中&#xff0c;我们已经了解了父进程和子进 程的概念&#xff0c;并已经掌握了系统调用exit的用法&#xff0c;但可能很少有人意识到&#xff0c;在一个进程调用了exit之后&#xff0c;该进程并非马上就消失掉&#xff0c;而是留下一个称为僵尸进 程&#xff08;zomb…

ComblockEngine 引擎实践

comblockEngine 参考资料 官方网址 学习备注 熟悉内容 1.python 的字符串操作 2.flags 属性的作用域 flags等 问题每天 1 1.基本数据类型 基本类型 2.数据库表的操作 操作1 3.属性的定义在.def中。self.出来之后&#xff0c;在继承多个类的时候会不会重复。应该是子类的属性覆盖…

王阳明诗歌集

此心光明&#xff0c;夫复何求。&#xff08;王阳明死前对弟子的遗言&#xff09; 0. 非常少年、非常父子 山近月远觉月小&#xff0c;便道此山大于月。若人有眼大如天&#xff0c;当见山高月更阔。—— 《蔽月山房》&#xff0c;作于12岁&#xff1b;1. 中秋 吾心自有光明月&a…

子承父业-C#继承

文章目录继承的定义和使用实例继承的特性继承的可传递性继承的单一性继承中的访问修饰符base和this关键字basethis实例博主写作不容易&#xff0c;孩子需要您鼓励 万水千山总是情 , 先点个赞行不行 继承是软件复用的一种形式。使用继承可以复用现在类的数据和行为&#xff…