学習ユニティ3Dゲーム開発毎日ノート(C#第3週)
月曜日 | 火曜日 | 水曜日 | 木曜日 | 金曜日 |
---|---|---|---|---|
オブジェクト(クラス、属性、メソッド(関数))について | 静的:静的 | 封印 | インターフェース | オブジェクト指向の概要 |
コンストラクタ | 静的クラス | 仮想メソッド | ディスプレイインターフェイスを実装します | |
デストラクタ | シングルトン | 抽象メソッドとクラス | 知識ポイント | |
構造体とクラスの違い:まとめ | 受け継ぎます | 仮想メソッドと抽象クラスを選択します | インデクサ | |
保護クラスのフィールド(属性) | グローバル変数とは何ですか? | 演算子のオーバーロード | ||
ローカル変数とは何ですか? |
2019年7月22日(A)
オブジェクト指向:
クラス:同じ属性や行動の抽象的な記述は、特定のグループの包括的な説明です
プロパティ:オブジェクトの特定の機能
メソッド(機能):このオブジェクトは動作が所有しています
コンストラクタ:クラスオブジェクトのコンストラクタ関数、それは、オブジェクトの開始で、ヒープ領域を開放します。
- 直接法によって、オブジェクトコンストラクタのオーバーロードのオブジェクトの初期化設定は、新しい新しいコンストラクタが呼び出される必要があり、そしてコンストラクタの名前はクラス名と一致する必要がある場合、ノーリターンタイプ。
- 私たちは、クラスのコンストラクタを書いていない場合は、システムは、引数なしのコンストラクタを追加するためにデフォルト設定されます。コンストラクタクラスがargをしている場合、システムはデフォルトの引数なしのコンストラクタに追加されません。
- 別の使用ではこのコンストラクタ:
デストラクタ:
このメソッドは、オブジェクトの破壊によって行われ、我々は一般的に書いていない、システムが自動的に追加されます。場合は、ガベージコレクションのシステムコール、システムはデストラクタメモリ回復域を呼び出します。
概要:構造体とクラスの違い:
- ときにオブジェクト型構造、クラスオブジェクト参照型時間。
- 何のクラスのコンストラクタは、引数なしのデフォルトコンストラクタを追加し、存在しない場合が設定されている場合、パラメータは、その後、引数なしのデフォルトのコンストラクタが追加されることはありません。
引数がデフォルトで追加されていないとパラメータが設定されている場合の構造は、システムを自分のコンストラクタを追加することはできません。または引数なしのコンストラクタを追加します。 - 基準電流コンストラクタを持つ構造は、割り当てられたすべての属性の完全な構造を必要とするクラスがありません。
- クラス属性は、構造は、デフォルト値を割り当てることができず、デフォルト値を割り当てることができます。
クラスフィールドの保護:
意味は、getメソッドで対応する値を返し、呼び出し元に返されます:GET
セット:外部値に割り当てられた値は、年齢の値がされ、私たちはもう一度、年齢に割り当てられているか否かを選択するためのスクリーニング方法を設定することができます。
2019年7月23日(B)
静的:静的:
①静态类型的变量是类最先加载到内存区域的;(静态方法不可以调用非静态方法,但是非晶态方法可以调用静态方法);
②静态变量或者方法,不是对象所单独拥有的;是所有对象共有的;通过类名、属性或者方法直接访问;
③静态区域的内容,是整个类中最后销毁的,也就是说不能乱声明静态属性或方法;
静态类:
单例 ---- 用于管理类,比如GameManager;
静态类 ---- 用于工具类,写工具给其他开发者调用的,比如系统提供的Console.ReadLine();
- 静态类在项目一运行就加载到内存;
- 静态类声明周期最长,所以整个项目中,能不写静态类就不写;
- 静态类是整个项目所共享的,静态类方法在整个项目中都可以通过类名调用;
单例:
什么类需要单例?–这个类不能有多个对象,比如游戏管理类;
特点:
①整个项目中这个类只有一个对象;
②单例类的写法:把构造函数私有化;
继承:
-
object类是C#中所有类的父类;
-
访问修饰符
子类名 : 父类名
{}
①一个类只能继承一个类(一个类只能有一个直接父类);
②子类保存父类的所有方法和属性;
③base 和 this关键字在构造函数中的不同作用;
④派生类的构造函数需要指向一个父类的构造,如果不指定将会指向父类默认(无参)构造 -
访问修饰符 :
①public 公共的 ,所有类中了可以访问
②protected 保护类型的 ,在本类和子类中可以访问
③private 私有的,只有在本类中可以访问;类中声明变量默认是private
④Internal: 程序集中可以使用; -
new关键字,如果在子类中声明的一个成员,与父类中重名,将默认启用new关键字,将会为这个新的成员申请一个新的空间,而父类中的成员将会被隐藏。
-
里氏替换:is as 的用法;
什么叫全局变量?
变量时类的一部分,有效范围是整个类,类中的所有方法都可以访问;即使声明在类的最后一行,在方法里也可以使用;
什么叫局部变量?
在一个固定的代码块中声明的变量;作用域是当前声明的地方到代码块结束,声明之前不能用;一般类对象临时使用,可以使用代码块括号括起来,减小类对象作用域也就是减少了对象的生命周期,提高代码效率。
2019.7.24(三)
1.Sealed:
修饰类时,当前类就不能被继承(封闭类);
修饰虚方法时,子类不能重写该方法;
2.虚方法:
①在父类中使用virtual修饰方法,子类中使用Override对其重写;
②子类重写了父类的虚方法,new一个子类对象赋值给父类声明一个变量;
当我们调用p2的speak虚方法,起始调用的是Chinese中重写的speak方法;
③new 关键字覆盖 和 virtual override 区别:
New关键字覆盖的方法,什么类的对象调用什么类的方法
Override调用的是生成对象时最后重写的方法;
④完成基类虚方法子类重写条件:方法名一致,返回值类型一致,参数类型个
virtual override:
new:
3.抽象方法和抽象类:
①抽象クラスでなければならない抽象変形を使用し、
②抽象メソッドは特定のメソッドの本体ではない。
③抽象クラスも抽象変更する必要がある、サブクラスは、抽象クラスは、すべての抽象メソッドを抽象クラスを実装する必要が継承;
④抽象クラスがあなたは、オブジェクトのインスタンスを持つことはできませんが、また、通常のルールのサブクラスの間に差がないと、サブクラスのコンストラクタをコンストラクタを書くことができます。
4.抽象クラスの仮想メソッドと選択:
①通常のクラスを使用して、仮想メソッドをインスタンス化する必要性と親クラス場合にインスタンス化される必要がある、このとき、
②親クラスがインスタンス化される場合に必要とされない、抽象クラスによって考慮することができる。
③混合物は、一般に、抽象クラスの仮想メソッド、サブを使用して追加クラスを選択する仮想メソッドを使用して実装することができ、この方法は、抽象メソッドによって実装されなければなりません。
2019年7月25日(D)
インターフェース
; 1、インターフェースのメソッドとプロパティは、メソッド本体があってはなりませんinterfaceキーワードの変更を使用してください
。2.インタフェースはコンストラクタを持つことはできません、彼はクラスではないことを知ることは、当然のことながら、クラスオブジェクト・インターフェースを持つことができません。
3.デフォルトのメンバーが公開されています。
4クラスは、クラスが別のクラスから継承し、基本クラスの必須の社説にインターフェイスを実装するときインタフェースは、インタフェースを継承することができ、複数のインターフェイスを実装することができます。
ディスプレイインターフェイスを実装します
結果:
知識ポイント:
引用类型默认值是null;
值类型默认值是0;---------每一种编程语言不一样;
インデクサ:
namespace 索引器
{
class Person
{
public string name;
public int age;
public string sex;
public string address;
public float height;
public Person() { }
public Person(string name,int age,string sex,string address,float height)
{
this.name = name;
this.age = age;
this.sex = sex;
this.address = address;
this.height = height;
}
public string this[int x] {
get {
switch (x)
{
case 0:
return name;
case 1:
return age.ToString();
case 2:
return sex;
case 3:
return address;
case 4:
return height.ToString();
default:
return "下标号越界";
}
}
set {
switch (x)
{
case 0:
name = value;
break;
case 1:
age = int.Parse( value);
break;
case 2:
sex = value;
break;
case 3:
address = value;
break;
case 4:
height = float.Parse(value);
break;
default:
break;
}
}
}
public void SayHello()
{
Console.WriteLine("哈罗,我是" + name);
}
}
class Program
{
static void Main(string[] args)
{
Person zhangsan = new Person("张三", 20, "男", "中国", 1.75f);
zhangsan[1] = "34";
Console.WriteLine(zhangsan[1]);
Console.ReadLine();
}
}
}
オーバーロード演算子:
2019年7月26日(E)
オブジェクト指向の要約:
- パッケージ:クラスを作成するにはどのように?どのようなプロパティ、フィールド、メソッド、
- 継承:リヒター置換(AS)で、コード効率の向上、ベース
- ポリモーフィズム:異なるオブジェクトに適用されたものと同じ方法が異なる効果を持っています。
- 仮想機能:仮想仮想関数は、一般的なカテゴリに書き込むことができ、それは抽象クラスで書かれていてもよい;サブクラスを書き換えされない場合があり、親クラスで仮想メソッドをオーバーライドすることができます。
- 抽象クラス、抽象機能:抽象抽象関数は抽象クラスで記述する必要があり、サブクラスがオーバーライドする必要があり、抽象クラスは、オブジェクトを持つことができない、抽象的な機能機能なし本体
- インターフェイスは:クラスではない、クラスがサプリメントを好む、クラスは複数のインタフェースを実装することができる(これは特に柔軟なIを使用してインターフェイス)