从一般到特殊-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,一经查实,立即删除!

相关文章

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

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

MINI类-结构体

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

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

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

SSL双向认证的实现

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

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…

子承父业-C#继承

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

MAVEN创建并打包web项目

maven项目是由一个maven project和多个maven module组成的&#xff0c;以下简介一下maven webapp的创建和打包&#xff0c;前提是你已经安装配置好maven了。打开eclipse。依照例如以下操作&#xff1a; 我们首先当然要先创建一个project。如上图选择。 如今maven project已经创…

学界 | CVPR 2018颁布五大奖项,何恺明获年轻学者奖

年度计算机视觉和模式识别盛会CVPR&#xff08;Conference on Computer Vision and Pattern Recognition&#xff09;在美国盐湖城开幕啦&#xff01; 据统计&#xff0c;本届大会有超过3309篇大会论文投稿&#xff0c;接收979篇论文。 面对如此多的论文评审任务&#xff0c;CV…

[BZOJ2458][BeiJing2011]最小三角形

题目描述 Description Xaviera现在遇到了一个有趣的问题。平面上有N个点&#xff0c;Xaviera想找出周长最小的三角形。由于点非常多&#xff0c;分布也非常乱&#xff0c;所以Xaviera想请你来解决这个问题。为了减小问题的难度&#xff0c;这里的三角形也包括共线的三点。 输…

小技巧集锦

2019独角兽企业重金招聘Python工程师标准>>> jackson JsonDeserialize 使用方法&#xff1a; 实现方法注解写在set方法上。 public class CustomJsonDateDeserializer extends JsonDeserializer<Date> {private SimpleDateFormat datetimeFormat new SimpleD…

interface-C#接口-统一的标准

文章目录接口的定义接口的实现实例1实例2接口的继承博主写作不容易&#xff0c;孩子需要您鼓励 万水千山总是情 , 先点个赞行不行 接口是面向对象编程的一个重要技术&#xff0c;在C#中负责实现多重继承。一个接口定义一个协定&#xff0c;实现接口类或结构体必须遵守其协定…

JMeter入门(1):JMeter总体介绍及组件介绍

一、JMeter概述 JMeter就是一个测试工具&#xff0c;相比于LoadRunner等测试工具&#xff0c;此工具免费&#xff0c;且比较好用&#xff0c;但是前提当然是安装Java环境&#xff1b;JMeter可以做(1)压力测试及性能测试&#xff1b;(2)数据库测试&#xff1b;(3)Java程序的测试…

根据HTML5 获取当前位置的经纬度【百度地图】【高德地图】

是想让地图的定位用户位置更准确一些。 查看了介绍&#xff1a; http://www.w3school.com.cn/html5/html_5_geolocation.asp 看介绍中拿数据挺简单。 <!DOCTYPE html> <html> <body> <p id"demo">点击这个按钮&#xff0c;获得您的坐标&…

C# delegate与event,委托与事件

文章目录委托示例事件实例博主写作不容易&#xff0c;孩子需要您鼓励 万水千山总是情 , 先点个赞行不行 委托和事件是C#中两个比较复杂的概念&#xff0c;这篇文章介绍两个概念与基本用法&#xff0c;让大家理解C#中的事件处理机制。 委托 委托也叫代理&#xff0c;就是把…

Java的四种引用,强弱软虚,用到的场景(转+补充)

Q1&#xff1a;引用队列是什么&#xff1f;如何使用&#xff1f;使用的场景有哪些&#xff1f; A1:oracle的api文档的描述&#xff1a; https://docs.oracle.com/javase/7/docs/api/java/lang/ref/ReferenceQueue.htmlReference queues, to which registered reference objects…

C# lambda表达式与匿名方法

文章目录匿名方法Lambda表达式实例实例博主写作不容易&#xff0c;孩子需要您鼓励 万水千山总是情 , 先点个赞行不行 C#中的匿名方法是在C#2.0引入的&#xff0c;它终结了声明委托的唯一方法是使用命名方法的时代。在C#更高版本中&#xff0c;Lambda表达式取代了匿名方法&a…

常用的相似度计算

在数据分析和数据挖掘的过程中&#xff0c;我们经常需要知道个体间差异的大小&#xff0c;进而评价个体的相似性和类别。最常见的是数据分析中的相关分析&#xff0c;数据挖掘中的分 类和聚类算法&#xff0c;如K最近邻&#xff08;KNN&#xff09;和K均值&#xff08;K-Means&…

玩转C#窗体-属性、方法和事件详细说明

文章目录简介Windows窗体的基本属性一、布局属性1、StartPosition属性2、Location属性3、尺寸属性4、WindowsState属性5、Autoscroll属性6、AutoSize属性二、样式属性1、ControlBox属性2、MaximizeBox属性3、MinimizeBox属性4、HelpButton属性5、ShowIcon属性6、Icon属性7、Sho…

for循环和数组练习

//公鸡2文&#xff0c;母鸡1文&#xff0c;小鸡半文&#xff0c;每种至少一只&#xff0c;100文买100只鸡有多少种可能var ci 0; for(var g1;g<50;g){for(var m1;m<100;m){for(var x1;x<100;x){if(g*2m*1x*(0.5)100&&gmx100){ci1;console.log("买公鸡&qu…

c# automapper 使用

一、最简单的用法 有两个类User和UserDto 1 public class User2 {3 public int Id { get; set; }4 public string Name { get; set; }5 public int Age { get; set; }6 }7 8 public class UserDto9 { 10 public string Na…