#一、类
##1、什么是类
在面向对象语言的结构化设计中,我们把那些看得见、摸得着、具体的、特指的事物称作是对象,而类则是对对象的一个抽象化是一个模子,确定对象的类型,确定对象将会拥有的特征(属性)和行为(方法)。
类不占用内存,对象占用内存。
//类的声明
//访问参数+ class+ 类名
//例如:
public class person //声明一个person类
{
//字段、属性、方法
}
##2、类的实例化
我们说类是一个抽象的概念,他拥有了对象的属性和方法,那么对象怎样才能使用这些属性和方法呢?这时候就涉及到了类的实例化,将类进行实例化之后,他的属性和方法才能引用到对象中。
就像是盖房子,图纸就相当于类,而房子就是一个对象。我们想要使用房子的“入住”方法,或“人数”属性,就必须有一个实实在在的房子存在,而不是一个图纸,所以将图纸变为房子的过程就是一个实例化。
//类的实例化
//类名+ 实例名 =new 类名();
//例如:
person per = new person(); //实例化这个类
//类成员的访问(字段)
per._name = "张三";
per._age = 18;
per._gender = '男';
per.SayHello();
per.walk();
Console.WriteLine(per._name);
Console.ReadKey();
##3、类的成员访问
字段、属性和方法都可以叫做类的成员,类被实例化之后,这些成员可以被对象访问,他们在定义时会有访问修饰符(public、private、protected、internal)用来定义访问的级别,有了访问的级别就可以控制成员在那些地方可以被访问,从而达到封装的目的。
public——公共成员,完全公开,没有访问限制
private——私有成员,在类的内部才可以被访问
protected——保护成员,该类内部和继承类(子类) 中可以访问
internal——当前程序集内可以访问,类的默认访问修饰符
字段成员的访问修饰符一般为private,这样的话,在其他类中就没有办法对这个字段进行访问,但是可以通过属性来给字段赋值(属性的访问修饰符一般为public)。
属性:
属性的定义get(读)、set(写)
属性是为了保护与之对应的字段的,保证对字段的读取和赋值符合要求。
属性可以分为:读写、只读、只写。
允许外部访问的变量一定要声明属性。
public class person
{
//字段
private string _name;
//与之对应的属性
public string Name
{
get { return _name; }//读
set { _name = value; }//写
}
}
##4、命名空间——类的调用
在同一命名空间下,类与类之间可以相互调用,如果是在不同命名空间下的类的引用,可以通过代码调用实现衔接。
方法:
1、在本类下添加引用,用using导入需要使用的类所在的命名空间(项目名),之后调用类。
2、在本类下添加引用后,直接填写代码(写全名)
#二、方法
##1、什么是方法
方法就是将一堆代码进行重用的一种机制,函数就是一段代码,这段代码可能有输入的值(参数),可能会有返回值。
一个函数就像一个专门做一件事的人,我们调用它做一些事情,他可能需要我们提供一些数据给它,它执行完成后可能会有一些执行结果给我们。要求的数据就叫做参数,返回的执行结果就是返回值。
##2、语法
**位置:**方法一般是写在主函数的外面,类的里面。
语法:[访问修饰符] static 返回值 方法名([参数列表])
例:
Public static void show()
//此方法是无返回值无参数的方法(void 代表无返回值),如果方法前加static叫静态方法。在本类中调用这个方法,可以直接 类名.方法名+();就可以使用。例如类的名称为program,则可以写成program.show()。
##3、方法的重载
方法是一个将函数进行重用的一种机制,实现特有的功能,但是当功能非常相似又很多时,我们就可以用方法的重载用来简化代码量。
比如1+2是一个方法1+2+3也是一个方法,1-2是一个放法1-2.5也是一个方法,他们同是加法或同是减法,这样我们就可以写一个加法方法重载或减法方法重载,他们之间方法名相同,但参数个数或参数类型可以不同。
说明:
方法名相同,但参数不同或参数的个数不同,返回类型可相同也可不同。
方法的重载和返回值无关,和参数的类型和个数有关。
//方法的重载
public static int addnumber(int num1, int num2)
{
return num1 + num2;
}
public static double addnumber(double num1, int num2)
{
return num1 + num2;
}
public static double addnumber(double num1, double num2)
{
return num1 + num2;
}
public static int addnumber(int num1, int num2,int num3)
{
return num1 + num2;
}
##4、可变数组——params数组
在定义方法时,我们需要在()中添加需要传入的参数,每个参数都需要为其定义数据类型,当传进来的是一个多种数据类型的数组时,即多个参数值,我们就可以使用params数组+object,来接收传入的内容,params是一个可变数组,可以让方法里面放很多很多参数,而object可以放不同的参数类型(它包含了所有数据类型)。
##5、构造函数
为甚么会出现?
1、在实例化类之后,当需要访问的属性较多时,直接赋值会很麻烦繁琐,构造函数可以让类在实例化是直接输入值,无需进行名称的赋值操作。
2、一般为了保护类中的属性,我们会将其属性变为只读的,从而使其无法在其他类中更改,保证了本身的安全性。构造函数就提供了这样一个功能,无法赋值,只能将值写出后,类进行读操作。
方法:
//构造函数,函数名是类名。需要实例化才能使用,实例化时括号里面需要有具体的参数值
public Person (string name,char gender,int age)
{
this._name = name;//this 是指示代词,将name这个参数赋值给name字段
this._gender = gender;
this._age = age;
}
//实例化带有构造函数的类
person p=new person ("小颖",'女',18);