/*namespace demo_10_11
{
internal class Program
{
enum State
{
zaixian,xiaxian,mangxian,yinshen
}
struct Student
{
public string Name;
public int id;
}
struct Student
{
public string Name;
public int id;
public int num;
}
static void Main(string[] args)
{*/
//枚举类型
/* State state1 = State.zaixian;
## //1、遍历枚举类型中的名字
foreach(string name in Enum.GetNames(typeof(State)))
{
Console.WriteLine(name);
}
## //2、遍历枚举类型中的值
foreach (int num in Enum.GetValues(typeof(State)))
{
Console.WriteLine(num);
}
## //3、结构体 多种数据类型组合,某一类信息比如人的集合
Student student1;
Student.name = "小明";
student1.id = 12;*/
## //4、相当于定义一个没有函数体的函数 和目标函数有相同的返回值和参数,使用委托指向目标函数
//练习1 编写一个程序,定义结构(姓名,年龄,手机号码),再定义一个一维数组,把结构作为数组元素类型,存入数据,然后依次输出
namespace demo_10_11
{
//定义一个车辆类
public class Vehicle
{
public Vehicle(int Speed, int MaxSpeed, int Weight) //构造方法
{
this.Speed = Speed;
this.MaxSpeed = MaxSpeed;
this.Weight = Weight;
}
public int Speed;
public int MaxSpeed;
public int Weight;
public void run (){
Console.WriteLine("我是一辆车,我平时速度是{0},最大速度是{1}",Speed,MaxSpeed);
}
public void stop()
{
Console.WriteLine("我的重量:{0}", Weight);
}
}
class Animal //定义了一个动物类
{
//构造函数 初始化对象 当我们new创建一个对象的时候会执行构造函数,进行初始化
public Animal(string name1,int age1,int num)
{
this.name = name1; //this指向当前创建的对象
this.age = age1;
this.num = num1;
}
//字段
public string name;
public int age;
public int num1;
public int num
{
get
{
Console.WriteLine("asdfghj");
return 123; //表示属性被访问的时候会执行该代码块,同时返回一个值
}
set
{
Console.WriteLine(value); //set表示当设置num的值的时候会执行,value表示新的值
}
}
//方法
public void Show()
{
Console.WriteLine("我是{0},会打篮球,今年{1}",name,age);
}
}
internal class Program
{
static void Main(string[] args)
{
//5、类(方法,属性,字段等等),增加代码的复用,对象由类生成的
Animal dog; //声明一个dog对象
Animal cat;
dog = new Animal("小贝",18,123); //创建一个dog对象
cat = new Animal("小白", 3, 321);
dog.Show();
cat.Show();
//练习2 定义一个车辆(Vehicle)类,具有run,stop等方法,具有speed(速度),maxspeed(最大速度),weight(重量)等域(也叫做字段)
Vehicle vehicle;
vehicle = new Vehicle(333,222,111);
vehicle.run();
vehicle.stop();
}
}
}
练习题1
编写一个程序,定义结构(有姓名,年龄,手机号码三个字段),再定义一个一维数组,把结构作为数组元素类型,存入数据,然后依次输出。
一、面向对象
1.为什么要使用面向对象编程
我们可以将程序模块块,进行模块划分,每个模块提供特定的功能,这样每个模块都是独立的,互不影响,比如我们创建一个动物类,规定了所有动物都有走路的动能,或者性别的属性等等,如果我们想创建一个动物,比如猫,这个时候我们可以使用该类中有的方法和字段,那如果想创建一个狗对象同样可以用该类生成,同样也会有类中的方法,但这时候狗中的方法和属性都是独立和猫中的方法和字段互不影响,我们从这里可以明显看到面向对象可以提高代码的复用性,我不需要重复的定义函数和变量。
2.类是什么?
类实际上是创建对象的模板,每个对象都包含数据,并提供了处理和访问数据的方法。
3.类的基本定义
4.根据类创建对象
5.练习
6.构造函数
1. 构造函数的作用
构造函数会在类构造对象的时候自动调用自己,我们一般用于初始化对象存储的数据,所以构造函数本质是用于初始化数据的函数
2. 构造函数的基本写法
构造函数是类中和类同名的一个方法,当创建对象的时候自动调用该方法,一般用于初始化数据 构造函数中也可以调用对象中的方法,获取对象中的返回值存到对象的字段中
3.属性和字段
1.字段
- 属性的定义
- 属性的特点
- 访问属性和访问字段一样,当取得属性的值得时候,就会调用属性中的get块执行get块中的语句,所以get块需要一个返回值,类型就是属性的类型;当我们去给属性设置值得时候,就会调用属性中的set块,我们可以在set块中通过value访问到我们设置的值
设置只读或者只写,如果我们给属性只设置get块那么就是只读,如如果只设置set块那么就是只写 4. 两个访问修饰符
- public公开的的,访问最高权限
- private私有的,只能在类或者结构体内部中使用
9.使用其他项目中的类
- 在本项目中引用其他项目中的命名空间,比如这里我们在demo01项目中引入_demo中的命名空间
- 第一步
- 第二步
- 第三步
注意:想要使用其他项目中的命名空间中的类,那么该类的访问修饰符要设置为public公开的形式
8.匿名类型
当我们不确定数据的类型的时候,我们可以使用关键字var声明变量,那么该变量的类型就由初始化赋的值决定,如果赋的是字符串那么就是字符串类型
9.类的继承
1.为什么需要继承
很多类在项目中可能有相似的数据,比如在一个游戏中Boss类和小怪类Enemy这些类有很多相同的属性,比如血量,攻击值等,所以这个时候我们可以使用继承来让这两个类继承自同个类
2.实现继承的写法
10.虚函数(重写父类中的方法)
练习题
- 练习1
// Monster monster = new Monster(); 抽象类无法生成实例,只能被继承
//public 访问的最高权限,允许在同个项目或不同项目中被访问
//private 只允许在类或结构中被访问
//internal 只允许在同个项目中被访问
//protected 只允许在同一个类或结构或者此类的派生类中被访问