C#基础7:类的定义

 

PS:注释和讲解全在代码中

1. 类的定义

类与对象关系图:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;           //↑↑↑引入了5个系统自带的命名空间
//using C4_程序设计;        引入一个命名空间,例如“C4_程序设计(自身)”就是一个命名空间,只有引用了对应的命名空间,才能使用该空间中的类
namespace C4_程序设计           //最外层的这个namespace就是命名空间了
{
    class Point
    {
        public int x, y;        //字段:变量
        private double val;
        public Point(int x=0, int y=0, double val=0)        //方法:函数(这里是构造函数)
        {
            this.x = x;             //构造函数/方法/规则和C++一样,当然也可以重载
            this.y = y;             //如果没有定义构造函数,则会有默认构造函数,但是定义了的话默认构造函数就不再生效
            this.val = val;
        }
        public double Val       //属性:保护赋值,为了防止恶意赋值,例如一个人的年龄不可能超过1000岁,也不可能为负数
        {
            get                  //当通过属性名取值的时候,会自动调用get中的代码,获得val的值
            {
                return val;
            }
            set                 //当通过属性名给字段赋值的时候,会自动调用set中的代码,给val赋值
            {
                if (value >= 100)           //当输入的值超过100,那么默认为100
                    val = 100;
                else if (value <= 0)        //输入为负数时默认为0
                    val = 0;
                else
                    val = value;
            }
        }
        public void Print()
        {
            Console.Write("{0},{1}:{2}\n", x, y, val);
        }
        ~Point()            //析构函数,也和C++规则一样
        {
            //当然这个类完全没必要写个析构函数就是了,直接默认析构就好
        }
    }
    class 对象定义
    {
        static void Main()
        {
            Point me = new Point(0,0,0);        //对象的实例化
            /*
                new实例化关键字到底做了什么??
                ①在内存(堆空间)中开辟了一块空间
                ②在开辟出来的这个空间中创建对象数据
                ③调用对象的构造方法进行对象的初始化
             */
            me.x = me.y = 5;            //如果不定义默认为0
            me.Val = 1500;
            //me.val = 15;              //错误,因为是私有的,所以不能直接赋值
            Console.Write("{0},{1}:{2}\n", me.x, me.y, me.Val);     //输出结果为5,5:100

            Point you;
            you = me;       //赋值的过程为传递堆空间中的引用地址,you和me指向了同一个堆空间地址
            me.x = me.y = -1000;            //因此当你修改了me的内容,you也会被改变,毕竟两者指向的是同一个对象
            you.Print();        //输出结果为-1000,-1000:100
            /*是的,在这里C#和C++的机制就完全不一样,C#在执行“Point you”这一语句时,只是在栈中生成一个长度位4字节的引用变量you,并且缺省为null,即该引用不指向任何实例
          C#也没有复制构造函数
             C#和C++还不一样的地方就是:C#只有值和引用两种类型,而不支持指针(只有在unsafe模式下才可对指针进行操作)
             值类型通常是基本数据类型,如int,double,还有struct等;而所有的自定义的类,还有数组、代表、接口等都是引用类型
             这也很明显能看的出来,C++的引用和C#的引用基本上不是一个东西,对于C#的引用,它更像是个“指针”
            */
        }
    }
}

 

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值