从一般到特殊-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
    • 帮忙点个赞吧。哈哈。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值