常用集合和泛型
1 int[]是引用类型还是值类型
2 数组之间如何进行转换
3 解释泛型的基本原理
4 什么是泛型的主要约束和次要约束

常用集合和泛型
1 int[]是引用类型还是值类型

数组类型是一族类型,它们都继承自System.Array,而System.Array又继承自System.Object。所有数组的类型都是引用类型。

引用类型的数组和值类型的数组的内存分配:

2 数组之间如何进行转换

数组类型在符合条件的情况下可以进行隐式地转换,条件包括:数组维数必须相同;目标项目类型和源项目类型必须存在隐式或者显示转换关系;原数组项目类型不是值类型。

数组类型可通过Array.ConvertAll方法进行内容转换,该方法需要使用者提供一个转换算法,以委托或者方法的形式传入Array.ConvertAll方法中。

//编译成功
string[] sz = {"a","a","a"};
object[] oz = sz; //编译失败,值类型项目的数组不能被转换
int[] sz = {, , };
object[] oz = sz; //编译失败,两者维数不同
string[,] sz = {{"a","b"},{"a","c"};
object[] oz = sz;

数组内容转换示例:

    class ArrayConvert
{
static void Main(string[] args)
{
String[] times={"2018-1-1",
"2018-1-2",
"2018-1-3"}; //使用不同的方法转换
DateTime[] result1 = OneByOne(times);
DateTime[] result2 = ConvertAll(times); //结果是相同的
foreach (DateTime item in result1)
Console.WriteLine(item.ToString("yyyy-MM-dd"));
foreach (DateTime item2 in result2)
Console.WriteLine(item2.ToString("yyyy-MM-dd"));
Console.Read(); } //逐个手动转换
private static DateTime[] OneByOne(String[] times)
{
List<DateTime> result = new List<DateTime>();
foreach (String item in times)
{
result.Add(DateTime.Parse(item));
}
return result.ToArray();
} //使用Array.ConertAll方法
private static DateTime[] ConvertAll(String[] times)
{
return Array.ConvertAll(times,
new Converter<String, DateTime>
(ArrayConvert.DateTimeToString));
} private static DateTime DateTimeToString(String time)
{
return DateTime.Parse(time);
}
}

输出:

2018-01-01
2018-01-02
2018-01-03
2018-01-01
2018-01-02
2018-01-03

3 解释泛型的基本原理

泛型允许程序员定义更通用的类型和算法,并且在具体使用时在生成具体的封闭类型。所有代泛型参数的类型都是一个开放式类型,它不能被实例化,但具备所有封闭类型的其他特性,本质上,它和封闭类没有区别。在.NET中,泛型的另外一个重要作用是避免容器操作中的装箱拆箱。

泛型示例:

    class MainClass
{
static void Main(string[] args)
{
//从开放类型到封闭类型
GenericClass<String> gc = new GenericClass<String>("我是泛型");
Console.WriteLine(gc);
Console.Read();
}
} //一个简单的泛型类
public class GenericClass<T>
{
T my;
public GenericClass(T t)
{
my = t;
}
public override string ToString()
{
return my.ToString();
}
}

微软建议所有的泛型参数名称都以T开头,就像接口都以I开头一样,是一种编码的通用规范。

4 什么是泛型的主要约束和次要约束

每个泛型参数可以有至多一个主要约束,泛型的主要约束是指指定泛型参数必须是或者继承自某个引用类型,有两个特殊的主要约束:class和struct,分别代表泛型参数引用类型和值类型。

每个泛型参数可以有无数个次要约束,次要约束和主要约束的语法基本相同,但它规定的是某个泛型参数必须实现所有次要约束指定的接口。

泛型主要约束示例:

    public class ClassT1<T> where T : Exception
{
private T myException;
public ClassT1(T t)
{
myException = t;
}
public override string ToString()
{
//主要约束保证了myException拥有source成员
return myException.Source;
}
}
public class ClassT2<T> where T : class
{
private T myT;
public void Clear()
{
//T是引用类型,可以置null
myT = null;
}
}
public class ClassT3<T> where T : struct
{
private T myT;
public override string ToString()
{
//T是值类型,不会发生NullReferenceException异常
return myT.ToString();
}
}

转载请注明出处:

作者:JesseLZJ
出处:http://jesselzj.cnblogs.com

.NET基础 (09)常用集合和泛型的更多相关文章

  1. 《前端运维》一、Linux基础--09常用软件安装

    一.软件包管理 RPM是RedHat Package Manager(RedHat软件包管理工具)类似Windows里面的"添加/删除程序".软件包有几种类型,我们一起来看下: 源 ...

  2. C#基础课程之四集合(ArrayList、List<泛型>)

    list泛型的使用 ArrayList list = new ArrayList(); ArrayList list = ); //可变数组 list.Add("我"); //Ad ...

  3. Java基础系列二:Java泛型

    该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架. 一.泛型概述 1.定 ...

  4. 【转载】salesforce 零基础开发入门学习(二)变量基础知识,集合,表达式,流程控制语句

    salesforce 零基础开发入门学习(二)变量基础知识,集合,表达式,流程控制语句 salesforce如果简单的说可以大概分成两个部分:Apex,VisualForce Page. 其中Apex ...

  5. C#基础课程之五集合(HashTable,Dictionary)

    HashTable例子: #region HashTable #region Add Hashtable hashTable = new Hashtable(); Hashtable hashTabl ...

  6. c#基础语言编程-集合

    引言 在c#常用的集合分为非泛型集合和泛型集合. 非泛型集合的类和接口位于System.Collections命名空间.这些接口和类定义各种对象(如列表.队列.位数组.哈希表和字典)的集合. 泛型集合 ...

  7. python基础(常用内容)

    python基础(常用内容) 机器数: 一个数在计算机中的二进制表示形式就是机器数. 例如: +3用机器数表示就用<00000011>表示 -3用机器数表示就用<10000011&g ...

  8. 十八. Python基础(18)常用模块

    十八. Python基础(18)常用模块 1 ● 常用模块及其用途 collections模块: 一些扩展的数据类型→Counter, deque, defaultdict, namedtuple, ...

  9. C#集合与泛型集合

    看到这个标题,大家应该就知道有泛型集合,就有非泛型集合 既然都是集合,咱们今儿就简单的来对比讲解下 需要记住的不算太多,理解记忆.理解记忆 2017-11-0411:39:09 C# 泛型集合之非泛型 ...

随机推荐

  1. eclipse启动报错:An error has occurred.See the log file D:\eclipse\configuration\1552616709202.log

    如题,Eclipse崩了,只能按它留下的线索去看了1552616709202.log: !SESSION -- ::08.739 ----------------------------------- ...

  2. 【linux】linux权限管理

    一.权限的基本概念                                                   权限:访问计算机资源或服务的访问能力. Linux中,每一个资源或者服务的权限, ...

  3. XiaoMi Interview Log

    面试题目 PHP 弱类型 实现? COW 写时复制 实现? COW的时候内存的变化 12 $a = $b = 1;$b = 2; 的内存变化 ? 提供一个rand()函数[函数输出0 - 正无穷] 想 ...

  4. PHP向客户端广播信息

    在网络中数据传播分为:Unicast(单播) , Multicast(多播或者组播) 和 Broadcast(广播).广播和多播仅应用于UDP,它们对需将报文同时传往多个接收者的应用来说十分重要.而 ...

  5. 5_python之路之员工管理系统

    python之路之员工管理系统 1.程序说明:Readme.cmd 1.程序文件:info_management.py user_info 2.程序文件说明:info_management.py-主程 ...

  6. jsp 学习 第1步 - 引入 jstl

    通过 eclipse 新建 动态web项目  默认是没有引入 jstl, 则无法JSP页面引入相关标记. <%@ taglib prefix="c" uri="ht ...

  7. 「小程序JAVA实战」小程序的视频展示页面初始化(63)

    转自:https://idig8.com/2018/09/24/xiaochengxujavashizhanxiaochengxudeshipinzhanshiyemianchushihua62/ 进 ...

  8. php遍历所有文件

    <?php function getdir($dir){ static $str = ''; if(is_file($dir)){ $str.=$dir.'<br>'; }else{ ...

  9. 其他标签a实现提交功能

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. spring错误处理 Build path is incomplete. Cannot find class file for org.springframework.aop.Advisor

    Build path is incomplete. Cannot find class file for org.springframework.aop.Advisor 初学spring,记录一下出现 ...