Unity中用到的C#补充(二)-面向对象

1.面向对象编程的核心是封装、继承和多态。

2.类是引用型对象

Unity中,继承自MonoBehaviour的类不能使用new创建,也不能使用构造函数。

3.this 关键字

    int data = 0;
    public void SomeMethod(int data)
    {
        this.data = data;
    }

4.

这里写图片描述

5.访问修饰符

访问修饰符意义
public完全公开
protected本类和同一命名空间的子类可以访问
internal本类和同一命名空间任何地方可以访问
protected internalprotected + internal(上面两点)
private只有本类可以访问

Unity中不支持命名空间

6.属性写保护

属性(我叫它变量)可以使用get/set方法来定义只读还是可写。

    public int Level{get;}// 只读
    public int Name{get;set;}// 可写

也可以写成:

        private int _level;
        private int _name;

        public int Level
        {
            get { return _level; }
            set { _level = value; }
        }

        public int Name
        {
            get { return _name; }
            set { _name = value; }
        }

选中_level,右键-重构-封装字段

7.继承

子类重写父类方法,父类中需要用virtual来定义该方法,子类中用override来重写。

    class Enemy
    {
        public virtual void Attack();
    }

    class Player:Enemy
    {
        public override void Attack()
        {
            base.Attack();
        }
    }

8.关于static

static为静态分配,只有一个。

1.修饰类

此类在其他地方调用不用实例化

    static class Enemy
    {
        public static int a = 0;
    }

    class Player
    {
        int b = Enemy.a;
    }
2.修饰变量

方法执行完不销毁, 再次访问时上次运行的值还存在。

    class Program
    {
        static void Main(string[] args)
        {
            Enemy e1 = new Enemy();
            e1.UpLevel(1);
            Console.WriteLine(Enemy.level);

            Enemy e2 = new Enemy();
            e2.UpLevel(5);
            Console.WriteLine(Enemy.level);

            Console.WriteLine("Entre anyKey to shutdown");
            Console.ReadKey();

        }
    }

    class Enemy
    {
        public static int level = 0;

        public void UpLevel(int addlevel)
        {
            level += addlevel;
        }
    }

这里写图片描述

9.通过字段名称序列化对象

这个功能非常有有,当我们从数据库或XML文件读取数据时就可以用这个功能

using System;
using System.Collections.Generic;
using System.Reflection;


namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Enemy enemy = new Enemy();

            //  调用泛型函数赋值
            SetEnemy<Enemy>(enemy, "name", "Roushan");
            SetEnemy<Enemy>(enemy, "id", 0);

            Console.WriteLine("The enemy name is {0}, and his id is {1}", enemy.name, enemy.id);
            Console.WriteLine("Entre anyKey to shutdown");
            Console.ReadKey();

        }

        // 泛型函数
        public static void SetEnemy<T>(T obj, string fieldname, object value)
        {

            //  通过字段名称获取对象(obj)的变量
            FieldInfo info = obj.GetType().GetField(fieldname);

            if (info != null)
            {
                //  赋值
                info.SetValue(obj, value);
            }
        }
    }


    //  敌人类,包含名字和ID两个属性
    class Enemy
    {
        public string name = string.Empty;
        public int id = 0;
    }


}

这里写图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值