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{}
}

类似数组的方法使用对象

时间: 2024-11-02 23:38:26

010.里式转换、命名空间、字段属性、索引器的相关文章

里式转换

里式转换 :            子类可以赋值给父类,如果有一个地方需要一个父类作为参数,我们可以给一个子类代替父类             子类对象可以调用父类成员,但是父类对象永远只能只能调用父类自己的成员 using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks; namespace _里氏转换{    class Progr

SQL SERVER中隐式转换的一些细节浅析

其实这是一篇没有技术含量的文章,精通SQL优化的请绕道.这个缘起于在优化一个SQL过程中,同事问了我一个问题,为什么SQL中存在隐式转换,但是执行计划没有变? 我思索了一下,觉得这个问题也有点意思,说不定有些对隐式转换了解得不深入的同学都有此疑问,那么下面结合上下文场景做一个细节方面的解答. 我们一个系统中使用了ORMLite框架,粗心的开发人员弄出了不少下面这样的SQL语句,都存在隐式转换问题,如下所示,表machine_stop_alarm_msg 的结构如下,字段machine_no.st

Oracle的隐式转换

都说Oracle存在NUMBER和VARCHAR2类型的隐式转换,严格意义上需要避免,但为何需要避免,从下面的实验进行验证. 1. 创建测试表和索引 create table tn (id number, name varchar2(1)); create index idx_tn on tn (id); create index idx_tn on tn (name); 分别对NUMBER类型的id字段,VARCHAR2类型的name字段创建索引. 2. 查看VARCHAR2->NUMBER的

C#入门--索引器

C#入门--索引器 索引器允许类或结构的实例按照与数组相同的方式进行索引.索引器类似于属性,不同之处在于它们的访问器采用参数. 索引器概述 索引器使得对象可按照与数组相似的方法进行索引. get 访问器返回值.set 访问器分配值. this 关键字用于定义索引器. value 关键字用于定义由 set 索引器分配的值. 索引器不必根据整数值进行索引,由您决定如何定义特定的查找机制. 索引器可被重载. 索引器可以有多个形参,例如当访问二维数组时. class SampleCollection<T

索引器 C#

概述 索引器允许类或结构的实例就像数组一样进行索引. 索引器类似于属性,不同之处在于它们的访问器采用参数. 在下面的示例中,定义了一个泛型类,并为其提供了简单的 get 和 set 访问器方法(作为分配和检索值的方法). Program 类为存储字符串创建了此类的一个实例. Code 1 class SampleCollection<T> 2 { 3 // Declare an array to store the data elements. 4 private T[] arr = new

MySQL性能优化:MySQL中的隐式转换造成的索引失效

数据库优化是一个任重而道远的任务,想要做优化必须深入理解数据库的各种特性.在开发过程中我们经常会遇到一些原因很简单但造成的后果却很严重的疑难杂症,这类问题往往还不容易定位,排查费时费力最后发现是一个很小的疏忽造成的,又或者是因为不了解某个技术特性产生的. 于数据库层面,最常见的恐怕就是索引失效了,且一开始因为数据量小还不易被发现.但随着业务的拓展数据量的提升,性能问题慢慢的就体现出来了,处理不及时还很容易造成雪球效应,最终导致数据库卡死甚至瘫痪.造成索引失效的原因可能有很多种,相关技术博客已经有

MySQL SQL优化之字符串索引隐式转换

之前有用户很不解:SQL语句非常简单,就是select * from test_1 where user_id=1 这种类型,而且user_id上已经建立索引了,怎么还是查询很慢? test_1的表结构: CREATE TABLE `test_1` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id` varchar(30) NOT NULL, `name` varchar(30) DEFAULT NULL, PRIMARY KEY (`id`),

二、修改表、字段属性设置、索引设置、约束设置

 字段属性设置 not null 不为空 auto_increment 设定int类型字段的值可以"自增长",即其值无需"写入",而会自动获得并增加 注:此属性必须随同 primary key  或 unique key 一起使用. [primary] key: 设定为主键.是唯一键"加强":也不能重复并且不能使用null,并且可以作为确定任意一行数据的"关键值" unique  [key] : 设定为唯一键:表示该字段的

C#字段、属性、索引器

1.字段 字段是直接在类或结构中声明的任何类型的变量. 字段是其包含类型的"成员". 类或结构可以拥有实例字段或静态字段,或同时拥有两者. 实例字段特定于类型的实例. 如果您拥有类 T 和实例字段 F,可以创建类型 T 的两个对象,并修改每个对象中 F 的值,这不影响另一对象中的该值. 相比之下,静态字段属于类本身,在该类的所有实例中共享. 从实例 A 所做的更改将立刻呈现在实例 B 和 C 上(如果它们访问该字段). 2.属性 属性是 C# 中的一等公民. 借助该语言所定义的语法,开