面向对象总结
空间(namespace)-----类(class)-----对象(实例)-----对象.属性-----对象.方法
使用类对象、属性、方法:
view plaincopy to clipboardprint?
static void main(string[] args)
{
stu s1=new stu()
console.write(" 请输入考试成绩:" )
s1.score=convert.toint32(console.readline())
s1.add()
console.write(" 最终成绩:" )
console.writeline(s1.score)
}
static void main(string[] args)
{
stu s1=new stu()
console.write(" 请输入考试成绩:" )
s1.score=convert.toint32(console.readline())
s1.add()
console.write(" 最终成绩:" )
console.writeline(s1.score)
}
1、解决安全问题:访问修饰符
view plaincopy to clipboardprint?
使用这些访问修饰符可指定下列五个可访问性级别:
public:访问不受限制。
protected:访问仅限于包含类或从包含类派生的类型。
internal:访问仅限于当前程序集。
protected internal:访问仅限于当前程序集或从包含类派生的类型。
private:访问仅限于包含类型。
本节还介绍以下内容:
可访问性级别:使用四个访问修饰符声明五个可访问性级别。
可访问域:指定在程序节的哪个位置可以引用成员。
可访问性级别的使用限制:概述了声明的可访问性级别的使用限制
使用这些访问修饰符可指定下列五个可访问性级别:
public:访问不受限制。
protected:访问仅限于包含类或从包含类派生的类型。
internal:访问仅限于当前程序集。
protected internal:访问仅限于当前程序集或从包含类派生的类型。
private:访问仅限于包含类型。
本节还介绍以下内容:
可访问性级别:使用四个访问修饰符声明五个可访问性级别。
可访问域:指定在程序节的哪个位置可以引用成员。
可访问性级别的使用限制:概述了声明的可访问性级别的使用限制
2、解决赋值麻烦:构造函数 表现为:实例化时即赋初始值
view plaincopy to clipboardprint?
private employee(string strqualification string strname
char gender uint empsalary)
{
_qualification = strqualification
_name = strname
_gender = gender
_salary = empsalary
}
public static void main(string[] args)
{
// 调用默认构造函数
employee objgraduate = new employee()
// 调用参数化构造函数
employee objmba = new employee(“accps3“ ”张亮影“ ‘男' 5500)
console.writeline(“默认构造函数输出:
\n资格=“ + objgraduate._qualification)
console.writeline(“\n参数化构造函数输出:
\n资格= " +objmba._qualification)
}
private employee(string strqualification string strname
char gender uint empsalary)
{
_qualification = strqualification
_name = strname
_gender = gender
_salary = empsalary
}
public static void main(string[] args)
{
// 调用默认构造函数
employee objgraduate = new employee()
// 调用参数化构造函数
employee objmba = new employee(“accps3“ ”张亮影“ ‘男' 5500)
console.writeline(“默认构造函数输出:
\n资格=“ + objgraduate._qualification)
console.writeline(“\n参数化构造函数输出:
\n资格= " +objmba._qualification)
}
3、解决方法名太多:方法重载 表现为:同方法名不同参(注意调用)
view plaincopy to clipboardprint?
…
class billpayment
{
…
void paybill(int telephonenumber)
{
//此方法用于支付固定电话话费
}
void paybill(long consumernumber)
{
//此方法用于支付电费
}
void paybill(long consumernumber double amount)
{
//此方法用于支付移动电话话费
}
…
}
…
…
class billpayment
{
…
void paybill(int telephonenumber)
{
//此方法用于支付固定电话话费
}
void paybill(long consumernumber)
{
//此方法用于支付电费
}
void paybill(long consumernumber double amount)
{
//此方法用于支付移动电话话费
}
…
}
…
4、解决同类名太多:命名空间 表现为:同类名不同空间(注意使用)
view plaincopy to clipboardprint?
…
namespace sony
{
class television
{
...
}
class walkman
{
...
}
}
…
namespace sony
{
class television
{
...
}
class walkman
{
...
}
} view plaincopy to clipboardprint?
namespace samsung
{
class television
{
...
}
class walkman
{
...
}
}
namespace samsung
{
class television
{
...
}
class walkman
{
...
}
}
samsung.television sony.television
5、类的继承、多级继承
view plaincopy to clipboardprint?
//继承
class person
{
}
class student : person
{
}
//多级继承
class student : person
{
}
class gyccpstu : student
{
}
//不允许多重继承
public class graduate: student employee
{
}
//调用基类的构造函数
class student : person
{
student(…) : base(…)
{
}
}
//继承
class person
{
}
class student : person
{
}
//多级继承
class student : person
{
}
class gyccpstu : student
{
}
//不允许多重继承
public class graduate: student employee
{
}
//调用基类的构造函数
class student : person
{
student(…) : base(…)
{
}
}
6、调用基类的构造函数(如上)
7、方法重写
view plaincopy to clipboardprint?
using system
namespace cs4_方法重写
{
class person
{
public virtual void test()
{
console.writeline(" 人生往往有困难!" )
}
}
class stu:person
{
public override void test()
{
console.writeline(" 大学生的困难是面临各种考试!" )
}
}
class class1
{
/// < summary>
/// 应用程序的主入口点。
/// < /summary>
[stathread]
static void main(string[] args)
{
//
// todo: 在此处添加代码以启动应用程序
stu s1=new stu()
s1.test()
person p1=new person()
p1.test()
person p2=s1
p2.test()
}
}
}
using system
namespace cs4_方法重写
{
class person
{
public virtual void test()
{
console.writeline(" 人生往往有困难!" )
}
}
class stu:person
{
public override void test()
{
console.writeline(" 大学生的困难是面临各种考试!" )
}
}
class class1
{
/// < summary>
/// 应用程序的主入口点。
/// < /summary>
[stathread]
static void main(string[] args)
{
//
// todo: 在此处添加代码以启动应用程序
stu s1=new stu()
s1.test()
person p1=new person()
p1.test()
person p2=s1
p2.test()
}
}
}
8、专门等待重写的类——抽象类与抽象方法
view plaincopy to clipboardprint?
using system
namespace cs4_方法重写
{
abstract class person
{
public abstract void live()
public virtual void test()
{
console.writeline(" 人生往往有考验!" )
}
public void play()
{
console.writeline(" 我们有很多娱乐方式!" )
}
}
class stu:person
{
public override void test()
{
console.writeline(" 人生有很多很多的考验!" )
}
public override void live()
{
console.writeline(" 学生要以学习为主!" )
}
}
class gyccpstu:stu
{
public void leard()
{
console.writeline(" gyccp的学习一实践为主!" )
}
}
class class1
{
/// < summary>
/// 应用程序的主入口点。
/// < /summary>
[stathread]
static void main(string[] args)
{
//
// todo: 在此处添加代码以启动应用程序
gyccpstu s1=new gyccpstu()
s1.leard()
s1.live()
s1.play()
s1.test()
}
}
}
using system
namespace cs4_方法重写
{
abstract class person
{
public abstract void live()
public virtual void test()
{
console.writeline(" 人生往往有考验!" )
}
public void play()
{
console.writeline(" 我们有很多娱乐方式!" )
}
}
class stu:person
{
public override void test()
{
console.writeline(" 人生有很多很多的考验!" )
}
public override void live()
{
console.writeline(" 学生要以学习为主!" )
}
}
class gyccpstu:stu
{
public void leard()
{
console.writeline(" gyccp的学习一实践为主!" )
}
}
class class1
{
/// < summary>
/// 应用程序的主入口点。
/// < /summary>
[stathread]
static void main(string[] args)
{
//
// todo: 在此处添加代码以启动应用程序
gyccpstu s1=new gyccpstu()
s1.leard()
s1.live()
s1.play()
s1.test()
}
}
}
9、等待重写的变态类——接口
view plaincopy to clipboardprint?
using system
namespace cs4_接口1
{
/// < summary>
/// class1 的摘要说明。
public interface iperson
{
void test()
int live()
}
class stu:iperson
{
public void test()
{
console.writeline(" 考试对中国学生很重要!" )
}
public int live()
{
console.writeline(" 生活对每一个人都很重要!" )
return 10
}
}
class gyccpstu:stu
{
public void leand()
{
console.writeline(" 我们要好好学习!" )
}
}
class class1
{
/// < summary>
/// 应用程序的主入口点。
/// < /summary>
[stathread]
static void main(string[] args)
{
//
// todo: 在此处添加代码以启动应用程序
gyccpstu s1=new gyccpstu()
s1.leand()
console.writeline(s1.live())
s1.test()
}
}
}
using system
namespace cs4_接口1
{
/// < summary>
/// class1 的摘要说明。
public interface iperson
{
void test()
int live()
}
class stu:iperson
{
public void test()
{
console.writeline(" 考试对中国学生很重要!" )
}
public int live()
{
console.writeline(" 生活对每一个人都很重要!" )
return 10
}
}
class gyccpstu:stu
{
public void leand()
{
console.writeline(" 我们要好好学习!" )
}
}
class class1
{
/// < summary>
/// 应用程序的主入口点。
/// < /summary>
[stathread]
static void main(string[] args)
{
//
// todo: 在此处添加代码以启动应用程序
gyccpstu s1=new gyccpstu()
s1.leand()
console.writeline(s1.live())
s1.test()
}
}
}
10、显式接口实现
view plaincopy to clipboardprint?
using system
namespace cs4_接口1
{
/// < summary>
/// class1 的摘要说明。
public interface iperson
{
void live()
}
public interface istu
{
void live()
}
class gyccpstu:iperson istu
{
public void play()
{
console.writeline(" 在学习的同时也要记得去尽情的玩!" )
}
void iperson.live()
{
console.writeline(" 生活对每一个人都很重要!" )
}
void istu.live()
{
console.writeline(" 生活对wo 一个人很重要!" )
}
}
class class1
{
/// < summary>
/// 应用程序的主入口点。
/// < /summary>
[stathread]
static void main(string[] args)
{
//
// todo: 在此处添加代码以启动应用程序
gyccpstu s1=new gyccpstu()
s1.play()
iperson p1=s1
p1.live()
istu p2=s1
p2.live()
}
}
}
using system
namespace cs4_接口1
{
/// < summary>
/// class1 的摘要说明。
public interface iperson
{
void live()
}
public interface istu
{
void live()
}
class gyccpstu:iperson istu
{
public void play()
{
console.writeline(" 在学习的同时也要记得去尽情的玩!" )
}
void iperson.live()
{
console.writeline(" 生活对每一个人都很重要!" )
}
void istu.live()
{
console.writeline(" 生活对wo 一个人很重要!" )
}
}
class class1
{
/// < summary>
/// 应用程序的主入口点。
/// < /summary>
[stathread]
static void main(string[] args)
{
//
// todo: 在此处添加代码以启动应用程序
gyccpstu s1=new gyccpstu()
s1.play()
iperson p1=s1
p1.live()
istu p2=s1
p2.live()
}
}
}
11、继承多个接口与接口的继承
view plaincopy to clipboardprint?
using system
namespace cs4_接口的接口
{
/// < summary>
/// class1 的摘要说明。
public interface iperson
{
void live()
}
public interface istu:iperson
{
int test()
}
class gyccpstu:istu
{
public void leand()
{
console.writeline(" 我们要好好学习!" )
}
public int test()
{
console.writeline(" 考试对中国学生很重要!" )
return 10
}
public void live()
{
console.writeline(" 生活对每一个人都很重要!" )
}
}
class class1
{
/// < summary>
/// 应用程序的主入口点。
/// < /summary>
[stathread]
static void main(string[] args)
{
//
// todo: 在此处添加代码以启动应用程序
gyccpstu s1=new gyccpstu()
s1.leand()
console.writeline(s1.test())
s1.live()
}
}
}
using system
namespace cs4_接口的接口
{
/// < summary>
/// class1 的摘要说明。
public interface iperson
{
void live()
}
public interface istu:iperson
{
int test()
}
class gyccpstu:istu
{
public void leand()
{
console.writeline(" 我们要好好学习!" )
}
public int test()
{
console.writeline(" 考试对中国学生很重要!" )
return 10
}
public void live()
{
console.writeline(" 生活对每一个人都很重要!" )
}
}
class class1
{
/// < summary>
/// 应用程序的主入口点。
/// < /summary>
[stathread]
static void main(string[] args)
{
//
// todo: 在此处添加代码以启动应用程序
gyccpstu s1=new gyccpstu()
s1.leand()
console.writeline(s1.test())
s1.live()
}
}
}
12. 属性:间接的控制成员字段(通过get和set) 主要达到安全方便的目的
view plaincopy to clipboardprint?
using system
namespace cs5_属性
{
/// < summary>
/// class1 的摘要说明。
class worker
{
string name
int money
static int rate
public worker(string cname int cmoney)
{
this.name=cname
this.money=cmoney
}
public string cname
{
get
{
return name
}
}
public int cmoney
{
get
{
if(money< =0)
{
console.writeline(" 数目不正确!" )
}
return money
}
}
public static int crate
{
get
{
return rate
}
set
{
if(value< 0)
{
console.writeline(" 利率不能为负!" )
return
}
rate=value
}
}
}
class class1
{
/// < summary>
/// 应用程序的主入口点。
/// < /summary>
[stathread]
static void main(string[] args)
{
//
// todo: 在此处添加代码以启动应用程序
worker w1=new worker(" 张三" 3021)
console.writeline(" 职员的姓名是:" +w1.cname)
console.writeline(" 工资是:" +w1.cmoney)
console.writeline(" 请输入个人税率:" )
worker.crate=int.parse(console.readline())
console.writeline(" 应缴个人所得税率:" +(w1.cmoneyworker.crate)/100)
}
}
}
using system
namespace cs5_属性
{
/// < summary>
/// class1 的摘要说明。
class worker
{
string name
int money
static int rate
public worker(string cname int cmoney)
{
this.name=cname
this.money=cmoney
}
public string cname
{
get
{
return name
}
}
public int cmoney
{
get
{
if(money< =0)
{
console.writeline(" 数目不正确!" )
}
return money
}
}
public static int crate
{
get
{
return rate
}
set
{
if(value< 0)
{
console.writeline(" 利率不能为负!" )
return
}
rate=value
}
}
}
class class1
{
/// < summary>
/// 应用程序的主入口点。
/// < /summary>
[stathread]
static void main(string[] args)
{
//
// todo: 在此处添加代码以启动应用程序
worker w1=new worker(" 张三" 3021)
console.writeline(" 职员的姓名是:" +w1.cname)
console.writeline(" 工资是:" +w1.cmoney)
console.writeline(" 请输入个人税率:" )
worker.crate=int.parse(console.readline())
console.writeline(" 应缴个人所得税率:" +(w1.cmoneyworker.crate)/100)
}
}
}
13. 索引器:通过 this关键词结合 属性 和 数组索引 的优点 来操作对象数组
view plaincopy to clipboardprint?
using system
namespace cs5_数组索引
{
/// < summary>
/// class1 的摘要说明。
/// < /summary>
class class1
{
/// < summary>
/// 应用程序的主入口点。
/// < /summary>
[stathread]
static void main(string[] args)
{
//
// todo: 在此处添加代码以启动应用程序
int[] num=new int[3]
num[0]=10
num[1]=30
num[2]=80
console.writeline(" 数组中的第一个数为:" +num[0])
console.writeline(" 数组中的第二个数为:" +num[1])
console.writeline(" 数组中的第三个数为:" +num[2])
int count
console.writeline(" 请输入班级人数:" )
count=int.parse(console.readline())
string[] stus=new string[count]
for(int i=0 i< count i++ )
{
console.writeline(" 第{0}同学的姓名是:" i+1)
stus[i]=console.readline()
}
console.writeline(" 本班同学录:" )
foreach(string s in stus)
{
console.writeline(s)
}
}
}
}
using system
namespace cs5_数组索引
{
/// < summary>
/// class1 的摘要说明。
/// < /summary>
class class1
{
/// < summary>
/// 应用程序的主入口点。
/// < /summary>
[stathread]
static void main(string[] args)
{
//
// todo: 在此处添加代码以启动应用程序
int[] num=new int[3]
num[0]=10
num[1]=30
num[2]=80
console.writeline(" 数组中的第一个数为:" +num[0])
console.writeline(" 数组中的第二个数为:" +num[1])
console.writeline(" 数组中的第三个数为:" +num[2])
int count
console.writeline(" 请输入班级人数:" )
count=int.parse(console.readline())
string[] stus=new string[count]
for(int i=0 i< count i++ )
{
console.writeline(" 第{0}同学的姓名是:" i+1)
stus[i]=console.readline()
}
console.writeline(" 本班同学录:" )
foreach(string s in stus)
{
console.writeline(s)
}
}
}
}
14. 委托:代理各种方法的执行(必须同参)
view plaincopy to clipboardprint?
using system
namespace cs5_委托
{
public delegate int method(int a int b)
class maths
{
public int add(int a int b)
{
return a+b
}
public int mul(int a int b)
{
return ab
}
}
class class1
{
/// < summary>
/// 应用程序的主入口点。
/// < /summary>
[stathread]
static void main(string[] args)
{
//
// todo: 在此处添加代码以启动应用程序
maths m1=new maths()
m1.add(2 3)
method m2=new method(m1.add)
console.writeline(m2(1 2))
method m3=new method(m1.mul)
console.writeline(m3(3 8))
}
}
}
using system
namespace cs5_委托
{
public delegate int method(int a int b)
class maths
{
public int add(int a int b)
{
return a+b
}
public int mul(int a int b)
{
return ab
}
}
class class1
{
/// < summary>
/// 应用程序的主入口点。
/// < /summary>
[stathread]
static void main(string[] args)
{
//
// todo: 在此处添加代码以启动应用程序
maths m1=new maths()
m1.add(2 3)
method m2=new method(m1.add)
console.writeline(m2(1 2))
method m3=new method(m1.mul)
console.writeline(m3(3 8))
}
}
}
15. 事件:把多个类对象的多个方法,捆绑在一起响应执行
view plaincopy to clipboardprint?
using system
namespace person
{
class stu
{
string name
public delegate void reggate() //定义委托
public event reggate regevent //定义事件
public stu(string cname) // 构造函数
{
this.name=cname
}
public void stugo() // 引发事件的函数
{
console.writeline(name+" 来学校报到了!" )
regevent()
}
}
}
namespace cs5_事件
{
class class1
{
/// < summary>
/// 应用程序的主入口点。
/// < /summary>
[stathread]
static void main(string[] args)
{
//
// todo: 在此处添加代码以启动应用程序
person.stu s1=new person.stu(" guangzi" )
s1.regevent+=new person.stu.reggate(success)
s1.stugo()
}
public static void success()
{
console.writeline(" 恭喜您!注册成功了!" )
}
}
}