ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C#:里氏转换法的引用、通过子类 访问父类的元素、集合的使用

2022-09-16 17:35:13  阅读:350  来源: 互联网

标签:转换法 C# 子类 list System int 集合 using 父类


最为简单的理解就是子类对象可以赋值给父类,父类可以通过强制转换成为子类,通常使用的转换的关键词as、is。当使用is进行转换的时候,如果转换成功返回的是true,如果转化失败返回是flase,当使用is进行转换的时候如果转换成功返回的是转换后的对象,如果转换失败返回的是null。

实例代码;

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 里氏转换法
{
class Program
{
static void Main(string[] args)
{
//将子类的对象赋值给父类的对象
//父类的对象虽然是使用子类的对象进行赋值,但是保持父类的属性,所以该对象只能调用父类的函数,元素等等
Person p = new Student("张三", 34, '男', 100);//这里从表面上看是不同类型数据之间的赋值,事实上不是,因为这里的student是继承了Person,所以student类具有Person的属性
p.CHLSS(); //这里是使用父类的对象访问父类的方法
//使用关键字is进行类的对象的转换,如果能转换,则结果是true,如果不能转换结果是false
//if (p is Student)
//{
// Student s = (Student)p; //将Person的对象转换成为student的对象
// s.CHLSS();
//}
Student s = p as Student; //使用关键字直接进行类的转换
s.CHLSS();//这里使用的是子类的对象访问子类的方法

Console.ReadKey();
}
}
public class Person
{
string _name;
int _age;
char _gender;
public Person(string _name, int _age, char _gender)
{
this._name = _name;
this._age = _age;
this._gender = _gender;

}
public void CHLSS()
{

Console.WriteLine("我是人类,我叫{0},今年{1}岁,性别{2}",this._name,this ._age,this ._gender);
}
}
public class Student : Person
{
int _score;
public Student(string _name, int _age, char _gender, int _score) : base(_name, _age, _gender)
{

this._score = _score;
}

public new void CHLSS()
{
Console.WriteLine("我的分数是{0}", this._score);

}}}

运行结果;

 

/*知识点:
* 1.子类的对象可以调用父类的函数以及元素,字段等等,父类的对象只能调用自己的函数以及字段
* 2.子类的对象可以赋值给父类的对象,但是此时表现的性能依旧是父类的对象的性能。
* 3.可以使用is关键字判断两个对象之间时候可以发生转换,如果可以返回的是true,如果不可以返回的是false
* 4.可以是as进行对象之间的转换,如果转换成功将返回转换后的对象,如果转换失败将会返回null

*/

子类访问父类中被保护的字段:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _01protected访问修饰符
{
class Program
{
static void Main(string[] args)
{
Studnet s = new Studnet();
Person p = new Person();
s.SayHello();
Console.ReadKey();
}
public class Person
{
protected string _name;
public void SayHello() {
Console.WriteLine("你好我是父类");
}
}
public class Studnet: Person
{
public new void SayHello() {
_name = "张三"; //这里不需要进行字串的定义,因为子类继承父类,所以子类可以访问父类protect修饰符修饰的访问权限。
Console.WriteLine("姓名:{0}",this ._name);
}

}
}
}

运行结果:

/*知识点:
* 1.使用private关键字进行修饰的字段和函数,只能在该类的内部进行使用。
* 2.使用proteed关键字修饰的字段和函数,只能在该类的内部以及该类的子类的内部进行访问。
*/

集合的使用:

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _02ArrayList集合的使用
{
class Program
{
static void Main(string[] args)
{
//数据中存放的数据是单一的,并且数组的长度是不可变的。
//集合中的数据是任意的,并且集合的大小是可变的
ArrayList list = new ArrayList(); //创建一个集合对象
//在集合里面添加单个的元素,使用的方法是Add();在集合中添加一个新的集合使用的是addrange()方法
list.Add(11);
list.Add("集合你好");
list.Add('否');
list.Add(5000m);
//向集合中添加数组,或者是集合的时候,不要使用ADD()方法,这样打印在控制台上的是改数组的命名空间
list.AddRange(new string[] { "你好", "Hello", "我喜欢写程序" }); //在集合中添加一个字符串数组
list.AddRange(new int[] { 1, 2, 3, 4, 5, 6, 7, 8 });//在集合中添加一个集合,数组也相当于是一个集合
Person p = new Person();
list.Add(p);//在集合中放入一个类的对象
// list.Clear();//清空集合中的所有的内容
// list.Contains("你好"); // 判断集合中是否包含指定的内容
//list.Insert(1,"我爱中国"); //集合中指定的位置插入特定的内容
// list.Remove("集合你好");//移除集合中特定的内容
// list.RemoveAt(2);//移除集合中对应索引中的内容
// list.RemoveRange(1, 4); //移除集合中特定范围了的内容
// list.Reverse();//实现集合的反转
// list.Sort();//集合的升序,注意在进行集合的升序的时候,可能会出现错误,因为可能会出现集合中的数据类型不同无法进行比较

for (int i = 0; i < list.Count; i++)
{
if (list[i] is Person)
{
((Person)list[i]).SayHelllo(); //将对象进行转换
}
else
{
Console.WriteLine(list[i]);
}
}
Console.ReadKey();
}
}
public class Person
{
public string _name;
public void SayHelllo()
{
Console.WriteLine("你好,我是父类");
}
}
}

运行结果:

/*知识点:
* 1.集合中可以存放任意类型的变量,集合的大小是可变的
* 2.集合中添加内容的方法分别是Add(),AddRande()
*/

集合的长度:

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _03集合的长度
{
class Program
{
static void Main(string[] args)
{
//ArrayList list = new ArrayList(); //创建一个集合
//list.Add(1);
//Console.WriteLine(list .Count);
//Console.WriteLine(list.Capacity);
//Console .ReadKey();
#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];
//for (int i = 0; i < list.Count; i++)
//{
// sum += (int)list[i]; //Int 类型是object类型的子类,上面在进行集合的赋值的时候装入的也是int类型的变量,所以可以进行强制转换
// if (max < (int)list[i])
// {
// max = (int)list[i];
// }
//}
//Console.WriteLine("最大值:{0} ,总数是:{1},平均值是{2}", max, sum, sum / list.Count);
//Console.ReadKey();
#endregion
#region 在集合中存入10个不同的随机数
ArrayList list = new ArrayList(); //创建一个集合
Random r = new Random();//创建一个随机数对象
for (int i = 0; i < 10; i++)
{
int rNumber = r.Next(0, 10); //注意这里的区间虽然是(0.10),但是实际能取到的内容是0-9;
if (!list.Contains(rNumber))
{
list.Add(rNumber);
}
else
{
i--;
}
}
for (int i = 0; i < list.Count; i++)
{
Console.WriteLine(list[i]);
}
Console.ReadKey();
#endregion
}
}
}

运行结果:

 

 


/*知识点:
* 1.集合实际的长度是储存的内容的长度
* 2.集合能够储存内容的长度通常是集合超过特定的范围的时候的二倍。
*/

 

标签:转换法,C#,子类,list,System,int,集合,using,父类
来源: https://www.cnblogs.com/Nic-zhang/p/16700347.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有