---------------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流! ------------------------
面向对象基础
面向对象不是取代面向过程。它的三个特性:封装、继承、多态。面向对象知识简化开发,弥补面向过程的一些不足,实际上的思维方法还是面向过程。
面向对象的几个概念:类、对象。
类
类:一些具有相同事物特征的集合,这些特征属性的实例就是一个对象。类是抽象的,对象是具体的(instance实例)。类不占内存,对象才占内存。
类中包含了属性、字段和方法。
方法:方法就是类能够执行的动作。
类的继承:类之间可以有继承关系。如:电脑相对于电器只要有自己的字段、方法就可以了,所有电器都有的属性电脑就不用写了。电器是电脑的父类(ParentClass),电脑是电器的子类(ChildClass)。基类(Base),电器类从其他(家用电器类)继承,只要是父类从其它类继承过来的,其它类都是本子类的基类。
定义一个类:Class+类名{属性;方法;}
类声明完毕,要用这个类首先要对类初始化。
class Program
{
static void Main(string[] args)
{
Person p1 = new Person();//实例化一个对象
p1.gender = "男";
p1.name = "李记者";
p1.age = 22;
p1.SayHello();
Console.ReadKey();
}
}
//声明一个类
class Person
{
public int age;
public string name;
public string gender;
/// <summary>
/// 类的内部声明方法
/// </summary>
public void SayHello()
{
Console.WriteLine("大家好,我叫{0},我今年{1}岁了,我的性别是{2}性",this.name,this.age,this.gender);//this.表示我自己的****
}
}
成员的访问级别设置,
这样达到面向对象中封装的作用:public(任何地方都可以访问)、private(默认级别,只能由本类中的成员访问)。还有internal(内部成员,只在同一程序集的文件中才可以访问的)、protected(声明保护成员,只能被类内部和派生类的函数使用和修改)来那个级别。如果把类的属性或者方法改为private则只能在内部使用改变,外部实例无法改变、调用。用public或者用字段外部可以随意的修改类的属性,但是用private,可以在类的内部进行控制。
class Program
{
static void Main(string[] args)
{
Person2 p2 = new Person2();
//p2.name无法对private方法的属性赋值
p2.GiveNickName("张三");//通过类内部的方法控制,把值传递给里边的字段
Console.ReadKey();
}
}
class Person2
{
public int age;
public int height;
private string name;//字段定义成了private后外部将不能调用
//外部不能直接给name赋值,但是可以通过类内部的方法控制,给他值,达到封装的目的
public void SayHello()
{
Console.WriteLine("我叫{0}",this.name);//类的内部可以调用private型的字段
}
public void GiveNickName(string nm)
{
//通过类内部的方法控制,给他值,达到封装的目的
if (nm == "张三")
{
return;
}
this.name = nm;
}
}
属性:
属性开头字母大写,字段开头字母小写。它定义了得到和修改相关字段的方法。
属性更充分地体现了类的封装性:不直接修改类的数据内容,而是通过访问其进行控制,借助Get方法和Set方法对属性的值进行读/写。
set(赋值),get(取值)先后顺序无所谓,value就代表用户赋值过来的值
static void Main(string[] args)
{
p3.Age = 20;
//Console.WriteLine(p3.Age);这样形成了死循环,并没有把值赋给age
Console.WriteLine("年龄{0}",p3.Age);//经过了set,字段age已经具有了值,然后get就可以取出,封装完成了
Console.ReadKey();
}
class Person3
{
//属性
private int age;//字段
public int Age//Age不存值而是把值给了age
{ //属性,set、get无先后顺序,以此达到封装的目的,省的每次都要写一个方法给一个private字段
get
{
return this.age;//取出这个类中private字段age的值
}
set
{
if (age <= 0)
{
return;
}
this.age = value; //value是用户输入的值,把它赋给字段age
}
}
}
属性使用的注意事项:虽然属性和字段的使用方法类似,但是属性的本质是方法,因此不能把属性当成变量,一些使用变量的地方不能使用属性,例如:不能把属性作为函数的引用型参数或输出参数。
-------------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流! ----------------------