---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
一. 面向对象的概念
面向对象(OOP,Object-Oriented programming)不是取代面向过程的,面向对象的巨大优势在于将实体的特征和行为封装到一个独立而且自给自足的代码单元(类)中,以后要用的时候再实例化类对象来用。
1.类和对象
- 类是一种数据类型 是用户自定义的数据类型。 类是由一些或者许多相同对象的共有特性(属性和行为)抽象出来然后构造成的,对象的这些属性特性和行为特征就是类的组成部分。
- 类是模具 是创建对象的模具 是一种抽象的概念 而对象是类的一个实例 是具体的概念!
- 例如:“学生”是类,“李四同学”是“学生”这个类的对象。类是抽象的,对象是具体的。按钮就是类,某个登录按钮就是对象。对象可以叫做类的实例(Instance)。类就像double,对象就像10.1。
2.字段
字段(Field)就是类的状态(不同的对象可能不一样的状态就是字段)。人这个类有姓名、年龄、身高等字段。
注意:眼睛的个数不能做为字段,因为所有人的眼睛个数都一样,没有差异性,记住字段一定要有差异性。
3.属性
属性就是将相应的私有字段通过封装成公共属性(快捷键:ctrl+R+E),以便于外界访问和修改。通俗的说,就是通过一个public变量来保护private变量的合法性。在这个属性中,我们还有get/set方法。(一旦对属性进行赋值,我们会直接调用属性的set方法 )
属性分为三种:
(1)读写属性,具有get/set方法的属性
(2)只读属性,只有get方法的属性,这个属性只能读取,不可以被赋值
(3)只写属性,只有set方法的属性,之歌属性只能写,不能读取
- 编写规范:属性开头字母大写,字段开头字母小写
- 字段和属性的区别是什么?属性看似字段、不是字段,可以进行非法值控制,可以设置只读。允许外部访问的值一定要声明为属性。
- 用反编译器可以发现set、get块内部其实就是get_***、set_***方法。
例如:Person类中定义了一个Age属性 用来存取age字段的值
class Person
{
private int age;//定义一个私有字段
public string name; //公有字段
public int Age//属性存取age字段值
{
get{return age;}
set{age=value;}
}
public void SayHello()//定义一个方法
{
Console.WriteLine("大家好,我叫{0},我今年{1}岁了",name,this.Age);
}
}
4. 方法
方法Method(函数),方法就是类能够执行的动作,比如问好、吃饭等。例如:上例当中的SayHello()方法
5. 定义类的语法
.类定义语法:
[访问修饰符] class 类名
{
成员 //类的属性和方法
}
.类的实例化语法:
类 实例名=new 类();
例如: 下面定义了一个类, Person tom = new Person();//产生一个叫做tom的实例 并且通过对象tom调用类中的方法和字段
class Person
{
public string Name;
public int Age;
public void SayHello()
{
Console.WriteLine("你好,我是{0}",Name);
}
}
初始化对象,调用方法:
Person tom = new Person();
tom.Name="tom";
tom.SayHello();
Console.WiteLine("{0}",tome.Name)
6. 类中成员访问级别
字段、方法、属性都可以叫做类的成员Member,它们都需要定义访问级别。访问级别的用处在于控制成员在哪些地方可以被访问,这样达到面向对象中“封装”的目的。
类中成员访问级别类型:
- public 在任何地方都可以被访问
- private 只能在本类中被访问
- internal只能在本项目中被访问
- protected只能在本类和子类中被访问
- protected internal 只能在本项目和它包含类的子类中访问
注意:在类这个级别,不写访问修饰符,默认为internal; 在类的里面,方法外边,不写访问修饰符,默认为private
7. 构造函数
- 构造函数用来创建对象,并且可以在构造函数中对对象进行初始化
- 构造函数是用来创建对象的特殊函数,函数名和类名一样,没有返回值,连void都不用
- 构造函数可以有参数,new对象的时候传递参数即可
- 如果不指定构造函数则类有一个默认的无参构造函数,在这个方法中我们什么也不做,也什么也看不到
- 如果制定了构造函数,则不再有默认的无参构造函数,如果需要无参构造函数,则需要自己来写
- 构造函数可以重载,也就是有多个参数不同的构造函数
构造函数例子:
class Person
{
public Person(string name,int age,char sex) //定义一个构造函数
{
this.name = name; //this.name表示当前实例的字段,后边name的值表示传过来的数
this.sex = sex;
this.age = age;
}
string name;
public string Name //将字段封装成属性
{
get
{
return name;
}
}
char sex;
public char Sex
{
get { return sex; }
set { sex = value; }
}
private int age;
public int Age
{
get { return age; }
set {
if (value >= 0)
age = value;
else
age = 0;
}
}
public void SayHello()
{
Console.WriteLine("大家好,我叫{0},我今年{1}岁了,我是{2}生",name,age,sex);
}
}
在Main()中:
Person zs = new Person("张", 18, '男');
zs.SayHello();
构造函数的重载(函数名相同,参数个数不同)
public Person(string name,int age,char sex)
{
this.name = name;
this.sex = sex;
this.age = age;
}
public Person(string name)
{
this.name = name;
}
8. static关键字
- static意思是静态,可以修饰类、字段、属性、方法
- 标记为static的就不用创建实例对象调用了,可以通过类名直接点出来。比如C#控制台操作的Console类里面的成员就被标记为静态的,可以直接用Console.直接点出来使用。
- 如果没有标记为静态就要通过创建实例对象来调用,比如说动态字符串StringBuilder就要new一个实例来调用
例如:
StringBuilder sb =new StringBuilder();
sb.xxx(); //xxx是方法名
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------