010.里式转换命名空间字段属性索引器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了010.里式转换命名空间字段属性索引器相关的知识,希望对你有一定的参考价值。

1、is as
is:判断对象和类型的兼容 兼容---true 不兼容---false 子类兼容父类

子类对象 is 父类类型 --true
对象 is 类型 (对象为此类型的对象 对象为此类型的子类的对象 --true)
public class Person{}
public class Student:Person{}

Person per=new Person();
Student stu=new Student();
Person person=new Student();
返回true:
per is Person
stu is Person
stu is Student
person is Person
person is Student


as:强制类型转换
转换成功,返回对象 转换失败,返回null 引用类型之间的转换

(目标类型)对象 :成功,返回对象 失败,引发异常(InvaildCastException)

2、常用接口
IComparable: int CompareTo(object obj)

练习
1 定义学生类Student,实现IComparable接口
按学生成绩进行降序排序

实现步骤
1、定义Student类,添加必要的字段和方法(至少包含姓名和成绩)
2、实现接口
public class Student:IComparable
{
public string name;
public int score;
public int CompareTo(Student stu){}
public int CompareTo(object obj){}
}
3、在Main方法中创建学生对象数组,并初始化
Student[] stuList=new Student[5];
//循环赋值
4、编写冒泡排序功能,实现学生的降序排序(可以用自定义方法实现)
public static void Sort(Student[] stuList){}
5、遍历输出排序后的结果


3、命名空间
namespace 命名空间名
{

}
命名空间名采用帕斯卡命名法
可以用公司名或产品名等做前缀
命名空间可以包括:类 接口 枚举 结构 委托 命名空间


避免命名冲突

同一个命名空间下,采用不完全限定名(类名)
不同命名空间下,在没有引用命名空间或者使用两个或以上命名空间中的同名类时,使用完全限定名(命名空间.类名)

using 命名空间名;
using 别名=命名空间;//简化代码 必须使用完全限定名时,用别名相对简单
别名.类名


3、属性
对私有字段的封装

访问修饰符 [可选修饰符] 数据类型 属性名
{
get//读 访问器
{
//任意代码
return this.字段;//return 值;
}

set // 写 访问器
{
//代码
this.字段 = value; //this.字段 = 值;
}

}

可以限定对字段的访问方式(读写、读、写)
可以在get或set中添加代码 逻辑判断


读写属性:get set
只读属性:get
只写属性:set

属性的访问修饰符
get 或set访问器的访问权限必须必属性具有更强的限定
只有读写属性才能在访问器前添加访问修饰符,而且只能是一个


用属性对字段进行封装后,除get、set访问器外,其他地方最好使用属性而不是字段


快速封装字段:
光标放到需要封装的字段所在行,右键-->重构-->封装字段
或者 ctrl+r,e

自动属性:读写属性
prop+Tab+Tab


4、索引器

作业1:
设计一个媒体播放器,要求:
1、根据用户录入的媒体格式进行播放,能够播放MP3、WAV、RM、AVI等格式
2、未来可能还会要求增加其他媒体格式。

 


作业2:
建立学生类,要求:
1、属性:姓名、学号、年龄
2、行为:上课、考试、面试
3、创建合适的构造方法
4、为所有属性设置读写属性
姓名不能超过4个字符
年龄必须大于18,小于50岁
学号必须大于0
5、为学生类增加一个学习课目的数组,并创建对应的读写索引器


public class Student
{
private string name;
private int stuNo;
private int age;

public string Name
{
get
{
return this.name;
}
set
{
if(value.Length>4)
{ //}
else
this.name=value;
}
}


private int[] scoreList=new int[3];

public int this[int index]
{
get
{
return this.scoreList[index];
}
set
{
this.scoreList[index]=value;
}
}
}

 

 

总结:
1、is as
is:判断 对象 is 类型

as:强制转换 对象 as 类型 失败:null
2、常用接口
IComparable int CompareTo(object obj)

3、命名空间

4、属性
对字段的封装

public 数据类型 属性名
{
get
{
return this.字段;
}
set
{
this.字段 = value;
}
}


5、索引器
对集合类数据的封装

public 数据类型 this[数据类型 参数]
{
get{}
set{}
}

类似数组的方法使用对象

以上是关于010.里式转换命名空间字段属性索引器的主要内容,如果未能解决你的问题,请参考以下文章

python010

将带有命名空间和属性的 XML 转换为 C# 模型类

使用命名空间时无法在 XSLT 中复制和修改属性

从 xml 的元素中提取命名空间属性

带有嵌套命名空间的 argparse 子命令

将 xml 数据序列化为 json 时忽略命名空间属性