车辆类和向量类的定义和使用

车辆类和向量类,private和public的访问权限控制,构造函数,属性,属性的匿名

013-车辆类和向量类的定义和使用

 Customer c1 = new Customer();
            Customer c2 = new Customer();
            c1.name = "张三";
            c2.name = "李四";
            c1.Show();
            c2.Show();

这段代码输出的内容:

名字张三
地址
年龄0
办卡时间
名字李四
地址
年龄0
办卡时间

  • 对象是可以有多个的(c1c2),但是类只能有一个类
定义一个车辆类

类的定义和声明

定义⼀个⻋辆(Vehicle)类,具有Run、Stop等⽅法,具有Speed(速度)、

MaxSpeed(最⼤速度)、Weight(重量)等域(也叫做字段)。

使⽤这个类声明⼀个变量(对象)

添加类的时候不需要添加后缀

class Vehicle
    {
        //先给类添加数据
        public string brand;
        public int speed;
        public int maxSpeed;
        public float weight;

        //接下来添加车辆类的功能
        public void Run()
        {//通过输出模拟车辆正在进行的功能
            Console.WriteLine("车辆跑起来了");

        }
        public void Stop()
        {
            Console.WriteLine("车辆停止了");
        }

    }

以上是车辆类的创建

然后回到Program.cs中使用这个类

 Vehicle car1 = new Vehicle();//先声明

            //可以直接给车辆类赋值,也可以直接用功能让他跑起来
            car1.Run();//输出  车辆跑起来了
            car1.Stop();//输出  车辆停止了
定义一个向量类

定义⼀个向量(

Vector3)类,⾥⾯有x,y,z三个字段,有取得⻓度的⽅法,有设置属性

(Set)的⽅法

使⽤这个类声明⼀个变量(对象)

//首先还是给数据 三个字段
        private float x;
        private float y;
        private float z;
        //取得向量的长度
        
        //需要使用Math.Sqrt方法
        public double Length()
        {
            return Math.Sqrt(x * x + y * y + z * z);
        }
  • 创建数据时私有和共有的区别

public和private的区别

private的数据只能在当前类里访问,在其他类里不可访问

而public在其他类里也可以访问

public的数据相当于把密码写在脸上,别人可以直接知道,而private的数据需要间接访问

  //利用一个Set方法让数据可以被间接访问到
    public void SetX(float temp)
        {
            x = temp;//这样的话外界可以调用数据temp,而temp的值和x是一样的
        }

以上操作重复三次

//利用一个Set方法让数据可以被间接访问到
        public void SetX(float temp)
        {
            x = temp;//这样的话外界可以调用数据temp,而temp的值和x是一样的
        }
        public void SetY(float temp)
        {
            y = temp;
        }
        public void SetZ(float temp)
        {
            z = temp;
        }

014-public和private访问权限控制

ector3 v1 = new Vector3();

            v1.SetX = (3.4f);
            v1.SetY = (1.5f);
            v1.SetZ = (0.5f);
            Console.WriteLine(v1.Length());

调用设置好的间接数据函数

因为间接数据是一个函数,所以在函数里有更多操作空间

控制数据位置在第一象限的代码示例

public void SetX(float temp)
        {
            if (temp < 0)//控制x轴为正数,如果不是,则x的值,不变
            {
                return;
            }
            x = temp;//这样的话外界可以调用数据temp,而temp的值和x是一样的
        }
        public void SetY(float temp)
        {
            if (temp < 0)
            {
                return;//保证y>0,结合上面的x>0,就能让位置在第一象限了
            }
            y = temp;
        }
        public void SetZ(float temp)
        {
            if (temp < 0)
            {
                return;
            }
            z = temp;
        }

用Set设置完之后还需要对应的 Get 方法来访问值


        //设置完之后还需要对应的 Get 方法来访问值
        public float GetX()
        {
            return x;
        }
        public float GetY()
        {
            return y;
        }
        public float GetZ()
        {
            return z;
        }

进一步使用的案例

比如年龄这种数据,不能出现负数

那么就使用public一个函数来做限制

private int age;

//条件控制 set+get
        public void setAge(int temp)
        {
            if (temp < 0)
            {
                return;
            }
            age = temp;
        }
        public int getAge()
        {
            return age;
        }

使用

 Customer list = new Customer();
            //list.age=-10
            list.setAge(-10);//做过条件限制之后,就算设置了负数,也会显示0,因为值被返回相当于没有赋值
            list.Show();
构造函数

我们构造对象的时候,对象的初始化过程是⾃动完成的,但是在初始化对象的过程中有的

时候需要做⼀些额外的⼯作,例如需要初始化对象存储的数据,构造函数就是⽤于初始化

数据的函数。

声明基本的构造函数的语法就是声明⼀个和所在类同名的⽅法,但是该⽅法没有返回类

型。

public class MyClass{
public MyClass(){
这个构造函数的函数体
}
}

说明:在我们为对象赋值的时候,所有对象的数据都是按照基本类型来赋值的

  • 值类型 - 默认值 0
  • 引用类型 - 默认值 null
//构造函数示例
        public Customer()
        {
            Console.WriteLine("我是构造函数");
        }

说明:其实每个类都一定需要构造函数,但是为什么我们创建过很多类但是都没有写过构造函数?

因为,当我们不主动写构造函数的时候,系统会自动生成一个默认的 五参的 构造函数

当我们创建、调用对象的时候,就会使用到构造函数

构造函数使用的演示

 Customer list = new Customer();//我们并没有给数据赋值,只是定义了这个数据,但是会打印出"我是构造函数"
            //构造函数 让 类 里的 默认值 改变了

一般我们使用构造函数是为了初始化数据的,构造函数可以被多次调用

多次调用的示例

Customer list1 = new Customer();//我们并没有给数据赋值,只是定义了这个数据,但是会打印出"我是构造函数"
            //构造函数 让 类 里的 默认值 改变了
            Customer list2 = new Customer();
            Customer list3 = new Customer();

输出:

我是构造函数
我是构造函数
我是构造函数
请按任意键继续. . .

  • arg - 参数

用构造函数初始化的示例:

 public Customer(string arg1, string arg2, int arg3, string arg4)//把四个数据给到构造函数的参数上
        {
            name = arg1;
            address = arg2;
            age = arg3;
            creatTime = arg4;
        }
 Customer zhangsan = new Customer("张三","天美",80,"忘了");//在括号里直接给到参数
            zhangsan.Show();//让张三把自己的信息显示出来

输出:

名字张三
地址天美
年龄80
办卡时间忘了
请按任意键继续. . .

可以存在多个构造函数

选择匹配的,从上往下调用

 Customer list1 = new Customer();
            list1.Show();

即使已经写了四个参数的构造函数,但是如果不主动给参数的话,还是会自动调用

输出:

我是构造函数//这是第一个构造函数,总共两个

名字
地址
年龄0
办卡时间//所有的数据都是没有的

总结:构造函数可以有多个,构造函数类名和函数名是一致的,构造函数没有返回值

016-构造函数的参数问题

注意:

  • new一个对象的时候,必须要找到对应的构造方法

说明:如果把五参的构造方法去掉,在使用的时候就不能new五参的新变量了

  • 用arg1,arg2,arg3…之类的方式命名构造函数非常不容易理解,所以最好用见名知意的方法命名构造函数,比如 name 就叫 name

问题:这个时候参数名和数据名重复了,该怎么赋值呢?

说明:通过this.解决,变量前加上this.之后,就代表着访问当前类里的成员

示例:

public Customer(string name, string address, int age, string creatTime)//把四个数据给到构造函数的参数上
        {
            //name = arg1;
            //address = arg2;
            //age = arg3;
            //creatTime = arg4;
            this.name = name;
            this.address = address;
            this.age = age;
            this.creatTime = creatTime;

        }
017-属性
using System;
using System.Collections.Generic;
using System.Text;

namespace _017_属性
{
    class Customer
    {
        private string name;
        private string address;
        private int age;
        private string createTime;


        //用结构函数可以搞,但是有点麻烦
        //public void SetAge(int age)
        //{
        //    this.age = age;
        //}
        //public int GetAge()
        //{
        //    return age;
        //}

        public void Show()
        {
            Console.WriteLine("名字:" + name);
            Console.WriteLine("地址:" + address);
            Console.WriteLine("年龄:" + age);
            Console.WriteLine("办卡时间:" + createTime);
        }
    }
}

结构函数能搞,但是有点麻烦

以下是用属性实现的方法:

一般让属性跟成员名字一致,但是首字母大写

属性里包含:get和set

用正常方式访问,得到函数的值

Customer list = new Customer();
            list.SetAge(23);
            Console.WriteLine(list.GetAge());

使用属性的方法

Main函数部分

static void Main(string[] args)
        {
            Customer list = new Customer();
            //list.SetAge(23);
            //Console.WriteLine(list.GetAge());

            //设置属性的值
            list.Age = 34;//当你给Age赋值的时候,他就会调用set框
            //访问属性里面的数据
            Console.WriteLine(list.Age);//调用get方法
        }

Customer函数的部分

 public int Age
        {
            get
            {
                return age;
            }
            set//value参数
            {
                age = value;//通过value拿到赋值的值
            }
        }

很像get方法和set方法的简写版本

018-属性和匿名类型

属性里可以只有set和get

说明:这样就设置了属性的只读或者,只写

可以直接简写

get;set;

  • 自动实现的属性

说明:没有添加int age数据成员,系统会自动创建一个数据成员

private string name;
        private string address;
        //private int age;
        private string createTime;


        //自动实现的属性
        public string Name
        {
            get;set;
        }
        public int Age { get; set; }

注意:因为已经没有了成员的定义,所以后面在访问的时候,也需要通过属性去访问了

使用这个方式可以直接控制只读和只写的权限

匿名类型

说明:通过var指定,但是只声明变量名,不指定类型

当你给他说明,他就是什么类型,在初始化的时候决定类型,然后就不能修改了

int age = 12;
            //匿名类型
            var age2 = 45;
            var name = "匿名";
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值