1.面向对象编程的核心是封装、继承和多态。
2.类是引用型对象
Unity中,继承自MonoBehaviour的类不能使用new创建,也不能使用构造函数。
3.this 关键字
int data = 0;
public void SomeMethod(int data)
{
this.data = data;
}
4.
5.访问修饰符
访问修饰符 | 意义 |
---|---|
public | 完全公开 |
protected | 本类和同一命名空间的子类可以访问 |
internal | 本类和同一命名空间任何地方可以访问 |
protected internal | protected + 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;
}
}