------- ASP.Net+Unity开发、.Net培训、期待与您交流! -------
7、 面向对象编程基础
C#是面向对象编程的一种语言,对象是由类实例化而来,类是具有一组相同数据和操作的对象的集合。类具有封装、继承和多态性。封装性是指数据和操作数据的方法封装为一个整体,用户只能看到类的对外特性和方法(公有数据和方法),内部数据和操作对用户隐藏(私有数据和方法)。继承性指我们定义新的类时可以以原有的类为基础作为父类,继承他的数据和方法,还可以扩展自己的数据和方法,这可以充分体现了代码的可重用性。多态性指通过基类我们可以动态调用不同派生类的同名数据和同名方法。
类的组成成员:
(1)、字段 在类中定义的变量即字段。
(2)、属性 个人观点,属性是一种特殊的字段,属性和字段的区别在于,当用属性进行数据的读取时,可以对数据进行内部处理。
属性的定义:
Class A
{
Private string name;
Private int age;
Public string Name{ get {return name;}set{name=value;}}
Public int Age{get{return age;}set{age=value}}
}
还有一种简写方式,不用定义字段:
Class B
{
Public string Name{ get;set;}}
Public int Age{get;set;}
}
(3)、方法 C#中的方法即面向过程编程中的函数,类的功能操作就是靠方法实现的。方法定义和函数是相同的,具有返回值、参数、和函数体。例:
Publicint sum(int a,int b)
{
Return a+b;//此方法实现了求两个整型数的和的功能
}
(4)、索引器 索引器是特殊的属性,通过设置索引来读取类的数据成员。例:
class Person
{
privatestring firName ="张三";
privatestring secName ="李四";
public string this[string index]
{
set
{
if(index =="first")
firName = value;
else if (index =="second")
secName = value;
else
thrownewException("错误的索引值");
}
get
{
if(index == "first")
returnfirName;
else if(index == "second")
returnsecName;
else
thrownewException("错误的索引值");
}
}
}
中括号中的索引不仅可以是字符串类型,还可以是整型等。
使用时:Person p1=new Person();
p1[“first”]=”王八蛋”;
8、 继承和多态
前面我们提到了什么是继承和多态性,继承实现了代码复用,提高了编程的效率,多态提高了编程的灵活性,使用基类我们可以动态的调用一类对象的同名但功能不同的方法来实现我们的意图。
(1)、继承的实现:
Class A
{
Public string Name{get;set;}
Public int Age{get;set;}
Public void print()
{
Console.WriteLine(“我叫”+this.Name+”,我”+this.Age+”岁了!”);
}
}
Class B:A
{
Public string Gender{get;set;}
Public void prinGender()
{
Console.WriteLine((“我叫”+this.Name+”,我”+this.Age+”岁了,我是个”+this.Gender+”的”);
}
}
C#中的类是单继承的。但可以继承多个接口。
(2)、多态的实现
C#中实现多态有多种形式,比如函数重载就是一种,下面写通过虚方法实现重载实现多态:
class Person
{
//基类属性
public int Age { get; set; }
privatestring Name {get;set; }
protectedchar Gender {get;set; }
internalstring Education {get;set; }
public static int count { set; get; }
//基类中的虚方法
public virtual charGetGender()
{
returnGender;
}
public string GetEdu()
{
returnEducation;
}
}
class Chinese : Person
{
//派生类中的属性
public string Hukou { get; set; }
public new stringGetEdu() //覆盖了基类中的方法
{
stringedu = base.GetEdu();
returnedu + "学历";
}
public override charGetGender()//重写了基类中的方法
{
return'm';
}
}
override重写虚方法实现了多态,new覆盖基类方法不能通过基类访问派生类方法。
9、 接口
接口是一种契约或规范,接口限制了继承它的类或接口必须按照基接口中声明的成员来定义成员和实现成员。接口中可以定义属性、方法、事件、索引器等,但接口中不提供它定义的所有的成员的实现,具体的实现在继承自这个接口的类中实现。例如:
interface Ibase//接口成员默认都是public的
{
voidMyMethod();//接口中的方法声明以一个分号结束,没有方法的实现
}
interface Iderive : Ibase
{
int Age{ get; set; }//属性(可读写)
new void MyMethod();//方法
event EventHandler responses;//事件
}
class Program:Iderive
{
int Iderive.Age { set;get; }//显式接口成员实现,不
public int Age { set; get; }//这里是本类的成员,不是继承的接口成员。
public void MyMethod()
{
Console.WriteLine("实现了接口中的方法");
}
public event EventHandlerresponses;//实现接口中的事件
}
------- ASP.Net+Unity开发、.Net培训、期待与您交流! -------