---------------------- <a href="http://edu.youkuaiyun.com"target="blank">ASP.Net+Android+IO开发S</a>、<a href="http://edu.youkuaiyun.com"target="blank">.Net培训</a>、期待与您交流! ----------------------
想多学些类的基础,掌握好基础,也便于理解后面要学到的东西,学得多了,发现技术是在帮我们更好的编程,来实现功能,让编程更简单些,工作量更少些,当然刚接触到,真的是生疏,总是有BUG出现,下面是我总结了笔记,修改好了,将类的继承和多态合并到下面的代码中.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 类的扩展关于封装继承多态
{
//枚举定义了两个变量(性别和职业)
public enum Sex
{
男, 女
}
public enum Profession
{
学生, 教师, 程序员
}
//结构定义了个信息,包括姓名,性别,年龄
public struct PersonMessage
{
string name;
Sex sex;
int age;
//封装了结构的字段
public string Name
{
get { return name; }
set { name = value; }
}
public Sex Sex
{
get { return sex; }
set { sex = value; }
}
public int Age
{
get { return age; }
set { age = value; }
}
//通过构造方法传参
public PersonMessage(string myName, Sex mySex, int myAge)
{
name = myName;
sex = mySex;
age = myAge;
}
}
class 类的扩展
{
static void Main(string[] args)
{
//关于静态
// 不用被new,就能调用的方法:static方法,static方法就是普通函数
// 在static方法中只能调用static成员,
// 但在非static方法中也可以调用static成员
// 静态类;被static修饰,不能被new的类
// 与访问修饰符分开来理解,两点都要注意
// 结构的赋值,结构也需要new
PersonMessage message = new PersonMessage("王华", Sex.男, 24);
PersonMessage message1 = new PersonMessage("童童", Sex.女, 21);
PersonMessage message2 = new PersonMessage("大静", Sex.女, 16);
Person perPerson = new Person(message);//new了下Person类
perPerson.sayHi();//调用它的方法
Teacher terPerson = new Teacher(message1, Profession.教师);
//子类可以调用父类的方法
terPerson.sayHi();
terPerson.TeacherSayHi();//当然也可以调用自己的方法
Student stuPerson = new Student(message2, Profession.学生);
//通过重写调用与父类名相同的方法
stuPerson.sayHi();
//调用下牵引
NameClass names = new NameClass();
//通过牵引找要的姓名,并赋给了name1
string name1 = names[0];
//names[0] = "王小虫";不能对只读的再进行赋值
Console.WriteLine("牵引中第一位叫{0},第二位叫{1},第三位叫{2}",names[0],names[1],names[2]);
Console.WriteLine("牵引重载后输出的牵引值是:"+names["王小","100分"]);
//调用原来的ToSting()方法,去应用ToString()方法
Console.WriteLine(names);
//调用继承抽象类People类的Myself类中改写的方法
MyselfL me = new MyselfL();
me.sayHi();
me.swimming();
//调用改写的ToString()方法
Console.WriteLine(me);
Console.ReadKey();
}
}
//在NameClass类中定义了个牵引 ,找到相应的姓名
class NameClass
{
string oneName = "王小虎";
string twoName = "王小龙";
string threeName = "石黑豹";
public string this[int index]//这的index还可以是其他类型,也可以多个参数
{
get//这里只用了get,变成只读的
{
if (index == 0)
return oneName;
else if (index == 1)
return twoName;
else if (index == 2)
return threeName;
else
//关于抛异常不太了解,需要进一步了解
//throw new Exception("错误,找不到序列号");//这里有错误,不知道什么情况,没有执行?
return null;
}
}
public string this[string name,string x]//牵引也可以重载
{
get
{
return name + x;
}
}
}
//父类,人类
class Person
{
PersonMessage message;
public PersonMessage Message
{
get { return message; }
}
public Person(PersonMessage message)
{
this.message = message;
}
public virtual void sayHi()//virtual用来定义成虚方法
{
Console.Write("大家好!我叫{0},性别{1},今年{2},请多多关照!\n", Message.Name, Message.Sex, Message.Age);
}
}
//继承人类的子类Teacher类
class Teacher :Person//有Person类派生的Teacher子类
{
Profession person = Profession.教师;
public Profession Person1
{
get { return person; }
set { person = value; }
}
public Teacher(PersonMessage message,Profession person):base(message)
{
this.person = person;
}
public void TeacherSayHi()//子类定义自己的方法
{
Console.WriteLine("我的职业是一名{0}.", person);//保护字段,字段只用在本类中
}
}
//继承人类的子类Student类
class Student : Person//有Person类派生的Student子类
{
Profession person = Profession.学生;
public Profession Person1
{
get { return person; }
set { person = value; }
}
public Student(PersonMessage message, Profession person)
: base(message)
{
this.person = person;
}
//第一种方法重写父类方法
//public new void sayHi()//方法名与父类相同,重写了父类的方法,用new隐藏了父类的方法
//{
// Console.Write("大家好!我叫{0},性别{1},今年{2},请多多关照!", Message.name, Message.sex, Message.age);
// Console.WriteLine("我还是一名{0}.", person);
//}
//第二种方法重写父类方法
public override void sayHi()//也可以通过override来修饰,实现对父类的重写,父类的方法必须通过virtual修饰成虚方法
{
Console.Write("大家好!我叫{0},性别{1},今年{2},请多多关照!", Message.Name, Message.Sex, Message.Age);
Console.WriteLine("我还是一名{0}.", person);
}
}
}