一.面向对象的概念:
1.面向对象的三个特性:封装,继承,多态。
2.面向对象的几个基本概念:类,对象,字段,方法,类的继承;类是抽象的,对象是具体的,字段就是类的状态,人这个类有姓名,年龄,身高等字段,方法(Method)是类能够执行的动作,比如问好,吃饭等,类之间有继承关系,比如“电脑”类可以从“电器”类继承,这样的好处是“电脑”类 只需定义自己特有的字段,方法就可以了。
3.类的继承:父类(Parent),基类(Base),电脑类是电器类的子类(ChildClass),重用。
4.如何定义一个类:
namespace 定义类
{
class Program
{
static void Main(string[] args)
{
//实例化对象
Person p1 = new Person();
//给对象的字段赋值
p1.Name = "jinpeng";
p1.Height = 168;
p1.Age = 21;
//调用对象的方法
p1.SayHello();
Console.ReadKey();
}
}
//定义一个类
class Person
{
//定义字段,修饰符为public
public string Name;
public int Age;
public int Height;
//定义方法,修饰符为public
public void SayHello()
{
Console.WriteLine("大家好,我叫{0},我的身高是{1},我的年龄是{2}",this.Name,this.Height,this.Age);
//this.**===我自己的***
}
}
}
二.成员访问级别
1.字段,方法,属性都可以叫做类的的成员Member,他们都需要定义访问级别,访问级别的用处在于控制成员在哪些地方可以被访问,这样达到面向对象中“封装”的目的。
2.几个访问级别:public(任何地方都可以访问);private(默认级别,只能由本类中的成员访问)
三.属性
1.惯用法:属性开头字符大写,字段开头字符小写
namespace 属性
{
class Program
{
static void Main(string[] args)
{
//实例化p1
Person p1 = new Person();
//对对象p1的Name属性(看清楚,是属性,并不是字段)进行赋值
p1.Name = "jinpeng";//这里的jinpeng相当于value传到p1.name字段中
Console.WriteLine("我叫{0}",p1.Name);
Person p2 = new Person();
p2.Name = "二球";
Console.WriteLine("我叫{0}",p2.Name);
Person1 p3 = new Person1();
//由于p3.Age获取不到值,只能返回值,就是说你爱给什么给什么,我只返回我的3
p3.Age = 30;
p3.Age = p3.Age + 1;
Console.WriteLine(p3.Age);
Console.ReadKey();
}
}
//写一个类Person
class Person
{
//属性开头字符大写,字段开头字母小写
private string name;//字段
public string Name//属性Name本身没有存数据,都是保存到name中了
{
set //赋值
{
if (value == "二球")
{
//看看:这里就说明问题了,如果是定义字段为public ,虽然可以直接进行赋值,但是当赋的值有问题(可能非法,比如年龄小于0,大于200等),
//不能做出对于的处理,很不完善,相反,通过属性get,set可以判断是否合法,如果不合法可以做出相应处理,这就是属性比直接定义字段为public更优势的地方,
//所以,在以后的编写过程中,要注意到这个问题,并且使用属性,不用public来对类进行字段修饰。
//1.this.name = "你的姓名有问题!";
return;//直接return的话,直接返回,不进行赋值,更取不到值,所以为空,但是不报错
}
this.name=value;//value代表用户赋值来的值
}
get //取值
{
return this.name;
}
}
}
//写一个特殊点的类Person1
class Person1
{
//没有定义字段,我只定义了一个属性Age,得不到值,只能返回值
public int Age
{
set { }
get
{
return 3;
}
}
}
//再写一个特殊点的类Person2,经常会犯的错误
//把值传给属性Age,Age再传给Age,再传。。。。必定死循环
//注意书写不能有误!
class Person2
{
private int age;//字段
public int Age//属性
{
set
{
this.Age = value;//将value传到了属性Age中
}
get
{
return this.Age;
}
}
}
}