介绍:泛型介绍,索引,Foreach遍历的解释,yield方法,path文件操作,Directory类基本操作<目录>

一:泛型

百度资料:泛型是 2.0 版 C# 语言和公共语言运行库 (CLR) 中的一个新功能。泛型将类型参数的概念引入 .NET Framework,类型参数使得设计如下类和方法成为可能:这些类和方法将一个或多个类型的指定推迟到客户端代码声明并实例化该类或方法的时候。例如,通过使用泛型类型参数 T,您可以编写其他客户端代码能够使用的单个类,而不致引入运行时强制转换或装箱操作的成本或风险,

使用泛型类型可以最大限度地重用代码、保护类型的安全以及提高性能。泛型最常见的用途是创建集合类。.NET Framework 类库在 System.Collections.Generic 命名空间中包含几个新的泛型集合类。应尽可能地使用这些类来代替普通的类,如 System.Collections 命名空间中的 ArrayList。您可以创建自己的泛型接口、泛型类、泛型方法、泛型事件和泛型委托。可以对泛型类进行约束以访问特定数据类型的方法。关于泛型数据类型中使用的类型的信息可在运行时通过反射获取。

* 泛型的好处:代码的重用。通过使用<T>来进行重用。可以往里面传递不同的参数类型,我们也可以将其定义为泛型方法,泛型类,泛型接口。

* 自定义泛型

里面有泛型类,泛型方法,泛型接口。

eg 1:

    /// 自定义泛型类
public class MyClass1<T>
{
public void SayHi(T teg)
{
Console.WriteLine(teg);
}
}
//泛型方法
public class Myclass2
{
public void Say<T>(T er)
{
Console.WriteLine(er);
}
}
//泛型接口
public interface IMyClass3<T>
{
T Sayhi(); //返回值类型
void SayHello(T msg); //参数类型
}
//实现泛型接口的两种情况
//1:普通类实现泛型接口
public class Class2 : IMyClass3<String>
{
public void SayHello(string msg)
{
Console.WriteLine(msg);
}
public string Sayhi()
{
throw new NotImplementedException();
}
}
//2:泛型类实现泛型接口
//这里的IMyClass3<U>的U是根据类接口中的U来决定的。
public class Class3<U> : IMyClass3<U>
{
public void SayHello(U msg)
{
Console.WriteLine(msg);
} public U Sayhi()
{
throw new NotImplementedException();
}
}

二:创建一个索引

    public class MyClass
{
private string[] _data = new string[5];
/// <summary>
/// 定义一个索引
/// </summary>
public string this[int index]
{
get { return _data[index]; }
set { _data[index] = value; }
}
}

创建泛型索引

    public class MyClass<T>
{
private T[] _data = new T[5];
/// <summary>
/// 定义一个索引
/// </summary>
///
public T this[int index]
{
get { return _data[index]; }
set { _data[index] = value; }
}
}
 

三:泛型约束

就是在泛型的后面加上where T:struct/class等。说明泛型以后会在定义的这个约束中来进行T的更换。

四:foreach(*)   是只读方法

使用条件:凡是具有GetEnumerator()方法的类型都可以进行遍历。

定义:调用枚举器来实现的。

通过上面的解释,我们应该知道只要实现了具有GetEnumerator()方法就可以实现froeach的遍历。

实例

1:先在类中实现IEnumerable接口,拥有GetEnumerator()方法,接着在写个Enumerator(枚举器)类且此类实现IEnumerator(枚举器接口)接口,这样我们这个类中就有了枚举器的所有的功能。

//不使用foreach来实现遍历。 foreach主要是调用了枚举器这个方法,我们只需要自己重新写个方法就行。实现IEnumerable接口就可以实现GetEnumerator

Main()中的写法

            var p = new Person();
var etor = p.GetEnumerator();
while(etor.MoveNext())
{
Console.WriteLine(etor.Current.ToString());
}
Console.WriteLine("OK");
Console.ReadKey();

具体类的实现

 public class Person:IEnumerable
{ private string [] friends=new string[]{"11","22","33"};
public string Name { get; set; }
public int Age { get; set; } public IEnumerator GetEnumerator()
{
return new PersonEnumerator(this.friends); //这里返回的是Object类型
}
} public class PersonEnumerator:IEnumerator
{
private string[] _friends;
public PersonEnumerator(string[] fs)
{
_friends = fs;
}
private int index = -1; //下标 指代0号前面位
//获取数据
public object Current
{
get
{
if(index>=0&&index<_friends.Length)
{
return _friends[index]; //通过下标来返回值。
}
else
{
throw new Exception();
}
}
}
//移动下标
public bool MoveNext()
{
if(index+1<_friends.Length)
{
index++;
return true;
}
return false;
}
//将下标还原,初始化
public void Reset()
{
index = -1;
}
}

五:yield方法

yield 关键字向编译器指示它所在的方法是迭代器块。编译器生成一个类来实现迭代器块中表示的行为。在迭代器块中,yield 关键字与 return 关键字结合使用,向枚举器对象提供值。这是一个返回值,例如,在 foreach 语句的每一次循环中返回的值。yield 关键字也可与 break 结合使用,表示迭代结束。

六:文件操作

*:File:操作文件,静态类,对文件整体操作。(拷贝,赋值,剪切等)

*:Directory:操作目录的类,目录夹

*:DirectoryInfo:文件夹的一个类,用来描述文件夹对象,(获取指定目录下所有目录时返回一个DirectoryInfo数组)

*:FileInfo:文件夹,用来描述一个文件对象。获取指定目录下的所有文件时,返回一个FileInfo数组。

*:Path:对文件”目录和路径”进行操作,<字符串>。

*:Stream :文件流,抽象类。

1:FileStream 文件流 MemoryStream内存流      NetworkStream网络流

2:StreamReader:快速读取文本文件

3:StreamWriter:快速写入文本文件

* Path文件操作

我们通过使用Path类来获取我们文件名,路径,修改文件名等。

            string path = @"F:\VS2008\Projects\ShiPinJiChu__HeiMa\文件操作\bin\Debug\文件操作.exe.config";
//获取文件名
Console.WriteLine(Path.GetFileName(path));
//获取文件的后缀
Console.WriteLine(Path.GetExtension(path));
//获取不带后缀的文件名
Console.WriteLine(Path.GetFileNameWithoutExtension(path));
//获取该路径的目录部分
Console.WriteLine(Path.GetDirectoryName(path));
//更改文件后缀名
Console.WriteLine(Path.ChangeExtension(path, "dll"));
//合并两个路径
string path1 = @"F:\VS2008\Projects\";
string path2 = "xiaohui.exe";
Console.WriteLine(Path.Combine(path1 + path2));
//返回当前用户的临时文件夹的路径。
Console.WriteLine(Path.GetTempPath());
//创建磁盘上唯一命名的零字节的临时文件并返回该文件的完整路径。
Console.WriteLine(Path.GetTempFileName());
Console.ReadKey();

* Directory类基本操作<目录>

             //创建目录
for (int i = 0; i < 10; i++)
{
Directory.CreateDirectory(@"C:\" + i);
}
Console.WriteLine("OK");
Console.ReadKey(); //删除目录
for (int i = 0; i < 10; i++)
{
//Directory.Delete(@"C:\" + i); //只能删除空目录
Directory.Delete(@"C:\" + i, true);
}
Console.WriteLine("OK");
Console.ReadKey(); //剪切
Directory.Move(@"C:\11", @"C:\222\11"); //重命名 <利用剪切来实现>
Directory.Move(@"C:\222", @"C:\333");
Console.WriteLine("OK");
Console.ReadKey(); //获取文件下面的所有的子目录
string path = @"C:\333\11";
var file= Directory.GetFiles(path);
foreach (var item in file)
{
Console.WriteLine(item);
}
//删除目录
Directory.Delete(@"C:\333",true);
Console.WriteLine("OK");
Console.ReadKey();

C#基础04的更多相关文章

  1. javaSE基础04

    javaSE基础04 一.三木运算符 <表达式1> ? <表达式2> : <表达式3> "?"运算符的含义是: 先求表达式1的值, 如果为真, ...

  2. javascript基础04

    javascript基础04 1.循环语句 1.While 语句: while (exp) { //statements; } var i = 1; while(i < 3){ alert(i) ...

  3. Linux命令工具基础04 磁盘管理

    Linux命令工具基础04 磁盘管理 日程磁盘管理中,我们最常用的有查看当前磁盘使用情况,查看当前目录所占大小,以及打包压缩与解压缩: 查看磁盘空间 查看磁盘空间利用大小 df -h -h: huma ...

  4. Linux基础04

    ** Linux基本操作常用命令(四) ** Linux系统管理命令 1.top:查看系统资源,每隔三秒刷新一次,按q:退出浏览状态 2.free:查看内存信息,-m,以MB单位显示 3.netsta ...

  5. Spring 框架基础(04):AOP切面编程概念,几种实现方式演示

    本文源码:GitHub·点这里 || GitEE·点这里 一.AOP基础简介 1.切面编程简介 AOP全称:Aspect Oriented Programming,面向切面编程.通过预编译方式和运行期 ...

  6. Java入门 - 语言基础 - 04.对象和类

    原文地址:http://www.work100.net/training/java-object-class.html 更多教程:光束云 - 免费课程 对象和类 序号 文内章节 视频 1 概述 2 J ...

  7. Java知识系统回顾整理01基础04操作符05赋值操作符

    一.赋值操作 赋值操作的操作顺序是从右到左 int i = 5+5; 首先进行5+5的运算,得到结果10,然后把10这个值,赋给i public class HelloWorld { public s ...

  8. Java知识系统回顾整理01基础04操作符01算术操作符

    一.算数操作符类别 基本的有: + - * / % 自增 自减: ++ -- 二.基本算数操作符 + - * / 基本的加 减 乘 除 public class HelloWorld { public ...

  9. python基础04 运算

    数学运算 print 2+2  #加法 print 1.3-4 #剪法 print 3*5 #乘法 print 4.5/1.5 #除法 print 3**2   #乘方 print 10%3   #求 ...

随机推荐

  1. 用canvas开发H5游戏小记

    自神经猫风波之后,微信中的各种小游戏如雨后春笋般目不暇接,这种低成本,高效传播的案例很是受开发者青睐.作为一名前端,随手写个这样的小游戏出来应该算是必备技能吧.恰逢中秋节,部门决定上线一个小游戏,在微 ...

  2. [算法][三轴、六轴、九轴传感器算法分析] 1、分享一个三轴加速计matlab动态可视化脚本

    一.有啥用 这里用的是LIS3DH三轴加速计,输出为X.Y.Z轴的加速度,通过串口连接电脑,电脑里运行matlab脚本通过串口实时获取数据并做可视化显示. 这里虽然是针对LIS3DH的,其实稍作修改即 ...

  3. jQuery的attr与prop

    jQuery1.6中新添加了一个prop方法,看起来和用起来都和attr方法一样,这两个方法有什么区别呢?这要从HTMl 的attribute与property区别说起,attr与prop正是这两个东 ...

  4. Web开发人员必读的12个网站

    The more you actually create, the more you’ll learn.(创造的越多,学习的越多),世界上有无数个开发人员会在网上分享他们的开发经验,我们无法向所有人学 ...

  5. WebApi系列~通过HttpClient来调用Web Api接口

    回到目录 HttpClient是一个被封装好的类,主要用于Http的通讯,它在.net,java,oc中都有被实现,当然,我只会.net,所以,只讲.net中的HttpClient去调用Web Api ...

  6. Time33算法

    Time33是字符串哈希函数,现在几乎所有流行的HashMap都采用了DJB Hash Function,俗称"Times33"算法.Times33的算法很简单,就是不断的乘33. ...

  7. 在ubuntu上安装nodejs[开启实时web时代]

    作为一名菜鸟,竟然在centos桌面上连输入命令行的地方都找不到,是在是对不起开山祖师,最后苍天不负苦心人,在ubuntu上找见了 [安装过程参考了http://cnodejs.org/topic/4 ...

  8. Android上dip、dp、px、sp等单位说明

    Android上dip.dp.px.sp等单位说明 dip  device independent pixels(设备独立像素). 不同设备不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA ...

  9. Atitit 图像处理之仿油画效果 Oilpaint油画滤镜 水彩画 漫画滤镜 v2

    Atitit 图像处理之仿油画效果 Oilpaint油画滤镜 水彩画 漫画滤镜 v2 1.1. 具体源码参考1 2. ,油画 水彩画具有几个比较明显的特点如下:1 2.1. 明暗层次(灰度)较少  也 ...

  10. POI生成WORD文档

    h2:first-child, body>h1:first-child, body>h1:first-child+h2, body>h3:first-child, body>h ...