C#面向对象编程(Object-Oriented Programming)
来源:互联网 发布:select二级联动php 编辑:程序博客网 时间:2024/05/20 08:44
C#面向对象编程(Object-Oriented Programming)
1. OOP 面向对象分析
2. COD 面向对象设计
3. OCAD 面向对象分析与设计
4. 面向对象三特性:封装、继承、多态
5. 类是数据类型,包含字段、属性、方法、构造函数
6. 关键字this表示自己
7. 封装:主要是为了减少代码复用性,隐藏功能的实现,以及代码的安全性
修饰符:
private 私有属性,只能本类访问
protected 可继承,扩展到子类可以访问
Internal 一个项目下可以访问
public 任何人都可以访问
sealed 只能用于修饰类,为密封类,表示不能继承
小细节:访问参数必须一致
用一个类来说明封装,我定义了一个类pserson.cs
public class person
{
//定义委托
protected delegate void listenbackcall(string ss);
//添加事件
protected event listenbackcall listenevent;
//私有字段name
private string name;
//Nmae属性
public string Name{
get{return name;}
set{name=value;}
}
int age; public int Age{ get{return age;} set{age=value;} } //听属性 public string Lis{ set { listenevent(value); } } //构造函数public person(){ age=1;}//构造函数public person(string name,int age) :this(){ this.name=name; this.age=age; //绑定事件 listenevent+=listen;}private void listen(string s){ Console.WriteLine("hear:{0}",s);}//类方法public void speak(string str){ Console.WriteLine(str);}
}
接着我定义一个类student.cs来说明继承
//student 继承类pserson
public class student:person{
public delegate void coursebackcall(string ss);
int id;
public int Id{
get{return id;}
private set{id=value;}
}
public student(string name,int age,int id):base(name,age)
{
this.id=id;
}
public void learn(string course,coursebackcall s)
{
s(course);
}
}
static void Main(string[] args) { person p=new person("riven",18); person p1=new student("zhangs",23,1002); student s=new student("haha",233,1001); p1.speak("zhangs tall this is a test"); s.Lis="i hear"; s.learn("study",delegate(string study){ Console.WriteLine("i can {0}!",study); }); p.Lis="test"; }
结果是:
F:\basis>dotnet run
牡丹开花了
玫瑰开花了
父类
玫瑰花开花啦实现了类flwing
花的description,这是子类方法
这是父类方法
同样用一个几个类来说明多态,说明之前先说明接口,以及抽象类。
接口的特点
1. 接口由Iterface关键字声明
2. 接口的方法不用实现只需声明
3. 只能声明为public
4. 接口允许多重继承
抽象类由abstract修饰,抽象类的特点:
① 抽象类只能做父类
② 抽象类不能实例化,既不能用new来产生属于抽象类的对象
③ 抽象类中除了抽象方法与普通方法不一样以外,其他的部分和普通类一样。即抽象类是普通类的特例,他特殊只是有抽象方法。所以它里面可以有字段,属性,普通方法。
3.抽象方法的特点
① 抽象方法是没有方法内容的,只有一个方法名和参数列表的方法。并以;结尾。
② 在方法的返回类型前加abstract
③ 抽象方法的内容由他的继承类根据继承类自身情况去写。重写这个方法时把abstract替换成override
注意:②③也是抽象属性的定义和实现的方法
多态的介绍:
定义一个接口Iflowered
interface Iflowered
{
string Name{get;set;}
void flowering();
}
定义了两个抽象函数 flw和flwing,定义两个类peony和rose。Peony继承flw和接口Iflowered,rose继承flwing和接口Iflowered
namespace basis
{
//抽象函数
abstract class flw{
public void getName(){
Console.WriteLine(“父类”);
}
} abstract class flwing { abstract public void flwings(); virtual public void Introduced(){ Console.WriteLine("这是一个虚函数!"); } virtual public void notAchieve(){ Console.WriteLine("这是父类方法"); } } //继承抽象类 flw 和 接口Iflowered class peony:flw,Iflowered { public string Name{get;set;} //实现抽象函数getName public new void getName() { Console.WriteLine(this.Name); } public peony(string name) { Name=name; } public void flowering() { Console.WriteLine(Name+"开花了"); } } //继承类flwing 和接口 Iflowered class rose:flwing,Iflowered { public string Name{get;set;} public rose(string name):base() { Name=name; } public void flowering() { Console.WriteLine(Name+"开花了"); } public override void flwings() { Console.WriteLine(this.Name+"开花啦"+"实现了类flwing"); } public override void Introduced(){ Console.WriteLine("花的description,这是子类方法"); } }
}
进行初始化:
static void Main(string[] args)
{
Iflowered ifl=new peony(“牡丹”);
ifl.flowering();
ifl=new rose(“玫瑰”);
ifl.flowering();
flw fl=new peony(“牡丹”);
fl.getName();
flwing flwi=new rose(“玫瑰花”);
flwi.flwings();
flwi.Introduced();
flwi.notAchieve();
}
结果:
F:\basis>dotnet run
牡丹开花了
玫瑰开花了
父类
玫瑰花开花啦实现了类flwing
花的description,这是子类方法
这是父类方法
- C#面向对象编程(Object-Oriented Programming)
- 面向对象编程(Object-Oriented Programming)
- C#面向对象(Object-Oriented Programming)
- Object Oriented Programming面向对象编程
- 面向对象编程OOP(Object Oriented Programming)
- 面向对象编程Object Oriented Programming
- 面向对象编程(Object-oriented programming,OOP)
- 面向对象编程(OOP)Object Oriented Programming
- 面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)
- Python Object Oriented Programming (面向对象编程) Generator
- 面向对象编程(Object Oriented Programming)概念总结及延伸(一)
- 面向对象编程(Object Oriented Programming)概念及延伸(二)
- 面向对象编程(Object Oriented Programming)概念及延伸(三)
- 关于OOP(Object Oriented Programming/面向对象编程)的理解
- 面向对象的程序设计(Object Oriented Programming)之一-----封装
- 面向对象程序设计(Object-oriented programming,OOP)
- OOP(Object Oriented Programming 面向对象程序设计)
- 面向对象程序设计(OOP-Object Oriented Programming)
- HashMap实现原理分析及简单实现一个HashMap
- h标签,p标签,br标签 hr per
- SWING可关闭的JTabbedPane
- 装饰模式
- KMP算法
- C#面向对象编程(Object-Oriented Programming)
- 九九乘法表
- MVC模型以及Model2模型介绍
- 2017.11.07工作日记
- 线程基础(一)
- Java学习——Number & Math 类
- 1. 笔记JAVA框架学习——Spring入门环境搭建及helloworld
- Daily Pratice_Cloud Computer
- obj[age]和obj['age']有什么区别?