c#自学之路第十三天
一、笔记
1.里氏转换
1)子类可以赋值给父类:如果有一个地方需要一个父类作为参数,我们可以给一个子类代替
2)如果父类装的是子类对象,那么可以讲这个父类强转为字类对象。
2.子类对象可以调用父类成员,但是父类对象只能调用自己的成员
3.在做里氏转换的时候,由于只要转换不对就会抛出异常,因此需要在转换的时候做判断,分别是用 is 或者 as.
is:表示类型转换,如果能够转换成功,则返回一个true,否则返回一个false
as:表示类型转换,如果能够转换则返回对应的对象,否则返回一个null;
4.protected访问修饰符
受保护的,可以在当前类的内部以及该类的子类中访问。
5.如果给集合添加单个数据的时候用 list.Add();
如果添加集合或数组用list.AddRange();
//list.Clear();//清除所有元素
//list.Remove(true);//删除单个元素 写谁就删谁,按值删除
//list.RemoveAt(0);//删除单个元素,按下标删除,
//list.RemoveRange(0,2); //根据索引,删除一定范围的元素
//list.Sort();升序排序
//list.Reverse();反转
//list.Insert(1, “sss”);在下标前面插入单个数据
//list.InsertRange(0, new string[] { “张三” });在下标前面插入一个数组或集合
//list.Contains(1);判断是否包含某个指定元素;
6.集合长度问题
count 表示这个集合中实际包含的元素个数
capcity 表示这个集合中可以包含的元素的个数
当实际包含的元素个数超过可以包含的元素个数,集合就会向内存中多开一倍的空间,保证够用
二、代码
1、
namespace 里氏转换
{
class Program
{
static void Main(string[] args)
{
// Student s = new Student();
Person p = new Student();
//Student ss = (Student)p;
//ss.StudentSayHello();
//is 的用法
//if(p is Teacher)
//{
// Teacher ss = (Teacher)p;
// ss.TeacherSayHello();
//}
//else
//{
// Console.WriteLine("转换失败");
//}
//if(p is Student)
//{
// Student ss = (Student)p;
// ss.StudentSayHello();
//}
//else
//{
// Console.WriteLine("转换失败");
//}
//as 的用法
Student t = p as Student;
t.StudentSayHello();
Console.ReadKey();
}
public class Person
{
public void PersonSayHello()
{
Console.WriteLine("我是父类");
}
}
public class Student:Person
{
public void StudentSayHello()
{
Console.WriteLine("我是学生");
}
}
public class Teacher : Person
{
public void TeacherSayHello()
{
Console.WriteLine("我是老师");
}
}
}
}
namespace 里氏转换练习
{
class Program
{
static void Main(string[] args)
{
Person[] pers = new Person[10];
Random r = new Random();
for(int i=0;i<pers.Length;i++)
{
int rNumber = r.Next(1, 7);
switch(rNumber)
{
case 1:pers[i] = new Student();
break;
case 2:pers[i] = new Teacher();
break;
case 3:pers[i] = new Belle();
break;
case 4:pers[i] = new Beast();
break;
case 5:pers[i] = new HandsomerBoy();
break;
case 6:pers[i] = new Person();
break;
}
}
for(int i=0;i<pers.Length;i++)
{
if(pers[i] is Student)
{
((Student)pers[i]).StudentSayHi();
}
else if(pers[i] is Teacher)
{
((Teacher)pers[i]).TeacherSayHi();
}
else if(pers[i] is Belle)
{
((Belle)pers[i]).BelleSayHi();
}
else if(pers[i] is Beast)
{
((Beast)pers[i]).BeastSayHi();
}
else if(pers[i] is HandsomerBoy)
{
((HandsomerBoy)pers[i]).HandsomeBoySayHi();
}
else
{
pers[i].PersonSayHi();
}
}
Console.ReadKey();
}
}
public class Person
{
public void PersonSayHi()
{
Console.WriteLine("我是人类");
}
}
public class Student:Person
{
public void StudentSayHi()
{
Console.WriteLine("我是学生");
}
}
public class Teacher:Person
{
public void TeacherSayHi()
{
Console.WriteLine("我是老师");
}
}
public class Belle:Person
{
public void BelleSayHi()
{
Console.WriteLine("我是美女");
}
}
public class HandsomerBoy:Person
{
public void HandsomeBoySayHi()
{
Console.WriteLine("我是帅哥");
}
}
public class Beast:Person
{
public void BeastSayHi()
{
Console.WriteLine("我是野兽");
}
}
}
namespace ArrayList集合
{
class Program
{
static void Main(string[] args)
{
//创建一个集合对象
ArrayList list = new ArrayList();
//集合:很多类型的一个集合
//数组:长度不可变,类型单一
//集合的好处:长度可以任意改变 类型随便
list.Add(1);
list.Add(3.14);
list.Add(true);
list.Add("张三");
list.Add(5000m);
list.Add(new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 });
Person p = new Person();
list.Add(p);
list.AddRange(new int[] { 12,33,44});
//list.Clear();//清除所有元素
//list.Remove(true);//删除单个元素 写谁就删谁,按值删除
//list.RemoveAt(0);//删除单个元素,按下标删除,
//list.RemoveRange(0,2); //根据索引,删除一定范围的元素
//list.Sort();升序排序
//list.Reverse();反转
//list.Insert(1, "sss");在下标前面插入单个数据
//list.InsertRange(0, new string[] { "张三" });在下标前面插入一个数组或集合
//list.Contains(1);判断是否包含某个指定元素;
for(int i=0;i<list.Count;i++)
{
if (list[i] is Person)
{
((Person)list[i]).SayHello();
}
else if(list[i] is int[])
{
for(int j=0;j<((int[])list[i]).Length;j++)
{
Console.WriteLine(((int[])list[i])[j]);
}
}
else
{
Console.WriteLine(list[i]);
}
// Console.WriteLine(list[i]);
}
Console.ReadKey();
}
}
public class Person
{
public void SayHello()
{
Console.WriteLine("我是人类");
}
}
}
namespace ArrayList集合练习
{
class Program
{
static void Main(string[] args)
{
#region//创建一个集合,里面添加一些数字,求平均数,和,最大值和最小值
//ArrayList list = new ArrayList();
//list.AddRange(new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9});
//int sum=0;
//int max = (int)list[0],min = (int)list[0];
//for(int i=0;i<list.Count;i++)
//{
// if(max<(int)list[i])
// {
// max = (int)list[i];
// }
// if(min>(int)list[i])
// {
// min = (int)list[i];
// }
// sum += (int)list[i];
//}
//Console.WriteLine("总和为:{0}", sum);
//Console.WriteLine("平均数为{0}", sum / list.Count);
//Console.WriteLine("最大值为{0}", max);
//Console.WriteLine("最小值为{0}", min);
//Console.ReadKey();
#endregion
//写一个长度为10的集合,要求在里面随机地存放10个数字(0-9)
//但是要求所有的数字不重复
ArrayList list = new ArrayList();
Random r = new Random();
for(int i=0;i<10;i++)
{
int rNumber = r.Next(0, 10);
if(!list.Contains(rNumber))
{
list.Add(rNumber);
}
else
{
i--;
}
}
for(int i=0;i<list.Count;i++)
{
Console.WriteLine(list[i]);
}
Console.ReadKey();
}
}
}
namespace Arraylist集合长度问题
{
class Program
{
static void Main(string[] args)
{
ArrayList list = new ArrayList();
//count 表示这个集合中实际包含的元素个数
//capcity 表示这个集合中可以包含的元素的个数
// 当实际包含的元素个数超过可以包含的元素个数,集合就会向内存中多开一倍的空间
Console.WriteLine(list.Capacity);
Console.WriteLine(list.Count);
Console.ReadKey();
}
}
}