黑马程序员-面向对象的概念
面向对象的概念
对象:具体的一个实体
我们在描术对象时能常会描术对象的特征,行为,这种特征/行为就相当于程序中的属性/方法
属性:对象所具有的各种特征
方法:行为,动作,执行的操作
类:类是模子,确定对象将会拥有的特征(属性)和行为(方法)
类是抽象的概念,仅仅是模板,比如说人类,对象是一个能看到摸到的具体实体
对象是类的实例化,类不占内存,对象占内存
定义类的语法:
[访问修饰符] class 类名
{成员;//变量和方法都是成员}
一般情况下一个类定义在一个CS文件中,文件名与类名相同
类的名字用pascal命名法
例:
Namespace_01类
{
Class person
{
Public string name;
Public char sex;
Public int age;
Public void sayhello();
{
Console.writeline(“我是{0},我是{1}生,我今年{2}岁了。”,name,sex,age);
}
}
}
在我们自已写的类中,我们在写方法时,先不用加static
下面我们定义了一个叫person的类,这个类仅仅是人这个对象的模板
在这个模板中规定人类对象都应有姓名,性别,年龄,和sayhello方法,如何通过一个类来产生一个对象呢?通过类来产生一个对象的过程叫类的实例化
类的实例化用关键字new
语法:
类 实例名=new类();
例:Person zsperson=new person();
访问类的属性:实例名.属性名 访问类的方法:实例名.方法名
例:zsperson.name=”张三”; zsperson.sayhello();
只要是没有加static的方法或属性,都必须先实例化再通过实例名.方法名,或实例名.属性来访问
加static的方法或属性,可以直接通过类名.方法名或类名.属性来访问
访问修饰符:在c#中有4个访问修饰符
Public:可以在任何地方被访问
Internal:只能在本项目中被访问
Private:只能在本类中被访问
Pretected:只能在本类和子类中被访问
在类这个级别,不写访问修饰符默认为internal
在一个类中定义变量或方法时,没有写访问修饰符,那么默认的访问修饰符为private
在类中定义的变量叫字段
字段用public修饰的问题/
定义一个变量,在这个变量中含有get/set两个方法,我们就叫做属性
例:public int age
{
Get{
Return age;
}
Set{
If(value>=0)
{age=value}
Else
{
Age=0
}
}
}
当用户通过等于号对其进行赋值时,会自动调用set方法,当用户对age进行取值时,会调用get方法
什么是属性,通俗点说,就是定义了一个public的具有get/set方法的变量,这个变量是用于保护私有变量
允许外部访问的变量一定要声明为属性:
读写属性:具有get/set方法的属性就叫做读写属性
没有set,则只能读不能写
没有get则只能写不能读
当我们实例化一个类时,系统会自动对这个类的属性进行初始化
数字类型初始化成0,string类型初始化为null
Char类型初始化成\0
使用构造方法的好处:
1, 对多个属性进行赋值时,不需要重复写实例名
2, 可以保证用户在new一个对象的时候,必须对某一个属性进行赋值
3, 和第2类似,在创建对象时,对只读属性进行初始化
构造函数可以有参数,new对象时传参数即可
当我们定义好一个类之后,如果我们没有写构造方法,那么系统会自动给我们加上一个默认的没有参数的构造方法,在这个构造方法中,什么也不做
我们可以定义一个构造方法,构造方法是一个特殊的方法,他的名字和类的名字相同,并且没有返回值,连void都可以省略不写,我们一旦手写了一个构造方法后,系统原先默认给我们添加的那个无参的构造方法就不会再为我们添加了
public student(string name)
{This.name=name;//类中字段=参数;}
在new的同时,必须调用它们的构造方法
构造方法同样可以重载 public student(string name,char sex)
对应位置参数类型不同或参数个数不同
可变参数:Params object[] arg;//系统自动将要传的数据组成数组传给arg
例:test(10,20,30);
Static void test(parame int[] arg)//可变参数必须是最后一个参数

浙公网安备 33010602011771号