空间(namespace)-----类(class)-----对象(实例)-----对象.属性-----对象.方法
使用类对象、属性、方法:
1、解决安全问题:访问修饰符
public:访问不受限制。
protected:访问仅限于包含类或从包含类派生的类型。
Internal:访问仅限于当前程序集。
protected internal:访问仅限于当前程序集或从包含类派生的类型。
private:访问仅限于包含类型。
本节还介绍以下内容:
可访问性级别:使用四个访问修饰符声明五个可访问性级别。
可访问域:指定在程序节的哪个位置可以引用成员。
可访问性级别的使用限制:概述了声明的可访问性级别的使用限制
2、解决赋值麻烦:构造函数 表现为:实例化时即赋初始值
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、解决方法名太多:方法重载 表现为:同方法名不同参(注意调用)
4、解决同类名太多:命名空间 表现为:同类名不同空间(注意使用)
Samsung.Television Sony.Television
5、类的继承、多级继承
//多级继承
Class student : person
{
}
Class gyccpstu : student
{
}
//不允许多重继承
public class Graduate: Student, Employee
{
}
//调用基类的构造函数
Class student : person
{
student(…) : base(…)
{
}
}
6、调用基类的构造函数(如上)
7、方法重写
8、专门等待重写的类——抽象类与抽象方法
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、等待重写的变态类——接口
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、显式接口实现
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、继承多个接口与接口的继承
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) 主要达到安全方便的目的
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.cmoney*worker.crate)/100);
}
}
}
13. 索引器:通过 this关键词结合 属性 和 数组索引 的优点 来操作对象数组
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. 委托:代理各种方法的执行(必须同参)
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 a*b;
}
}
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. 事件:把多个类对象的多个方法,捆绑在一起响应执行
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("恭喜您!注册成功了!");
}
}
}