학습 유니티 3D 게임 개발 매일 노트 (C #을 세 번째 주)
월요일 | 화요일 | 수요일 | 목요일 | 금요일 |
---|---|---|---|---|
개체 (클래스, 속성, 메소드 (함수))에 대한 | 정적 : 정적 | 봉인 | 인터페이스 | 객체 지향 요약 |
생성자 | 정적 클래스 | 가상 방법 | 디스플레이 인터페이스를 구현 | |
소멸자 | 싱글 | 추상 메소드와 클래스 | 지식 포인트 | |
구조와 클래스의 차이 : 요약 | 상속 | 가상 메소드와 추상 클래스를 선택 | 인덱서 | |
보호 등급 필드 (속성) | 전역 변수는 무엇인가? | 연산자 오버로딩 | ||
지역 변수는 무엇인가? |
2019년 7월 22일 (a)
객체 지향 :
클래스 : 동일한 속성과 행동의 추상적 인 설명입니다, 특정 그룹의 포괄적 인 설명입니다
속성 : 개체의 특정 기능
방법 (기능)이 객체가 행동에 의해 소유
생성자 : 클래스 객체에 대한 생성자 함수, 힙 영역을 열 수있는 객체의 시작이다;
- 직접적인 방법으로 객체 생성자 오버로드의 개체 초기화 구성, 새로운 새로운 생성자를 호출해야하며, 생성자의 이름은 클래스 이름과 일치해야하는 경우, 돌아올 수없는 유형;
- 우리는 클래스 생성자를 작성하지 않은 경우, 시스템은 인수가없는 생성자를 추가하는 기본 것이다 생성자 클래스가 arg를 한 경우, 시스템은 인수가없는 디폴트 구성에 추가되지 않습니다;
- 다른 사용에서이 생성자 :
소멸자 :
이 방법은 객체의 파괴에 의해 수행되고, 우리가 일반적으로 쓰지 않는다, 시스템이 자동으로 추가됩니다. 되면 가비지 콜렉션 시스템 호출 시스템 소멸자 메모리 재생 영역을 호출;
요약 : 구조와 클래스의 차이 :
- 타임 때 개체 유형 구조, 클래스 오브젝트 참조 형;
- 더 클래스 생성자는 인수가없는 기본 생성자를 추가, 존재하지 않는 경우가 구성된 경우, 매개 변수는 다음 인수가없는 기본 생성자가 추가되지 않습니다;
인수가 기본적으로 추가되지 않습니다와 매개 변수가 구성된 경우 구조는 시스템을 자신의 생성자를 추가 할 수 없습니다 또는 인수가없는 생성자를 추가합니다; - 참고 현재 생성자와 구조가 할당 된 모든 속성의 전체 구조를 요구한다 클래스는하지 않습니다;
- 클래스 속성은 구조는 기본 값을 할당 할 수 없습니다, 기본값을 할당 할 수있다;
클래스 필드 보호 :
가져 오기 : 의미는 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. 메소드 본문이 없어야합니다 인터페이스의 인터페이스 키워드 수정, 방법 및 속성을 사용,
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)
객체 지향 요약 :
- 패키지 : 어떻게 클래스를 작성하는? 어떤 속성, 필드, 메소드,
- 상속 : 릭터 여분 (처럼), 개선 된 코드 효율,베이스
- 다형성 : 다른 개체에 적용된 동일한 방법이 다른 효과를 갖는다
- 가상 기능 : 가상 가상 함수가 일반적인 범주에 쓸 수는,이 추상 클래스로 작성 될 수 서브 클래스가 부모 클래스의 가상 메소드를 오버라이드 (override) 할 수 있습니다, 다시 할 수 없습니다;
- 추상 클래스, 추상 기능 : 추상 추상 함수는 추상 클래스로 작성해야하며, 오버라이드 (override) 할 필요가 서브 클래스는, 추상 클래스는 객체를 가질 수 없습니다, 추상적 인 기능에는 함수 본문 없습니다
- 인터페이스 : 클래스없는 클래스는 보충을 선호, 클래스는 여러 인터페이스를 구현할 수 있습니다 (이것은 특히 유연한 I을 사용하여 인터페이스)