泛型的目标是采用广泛适用和可交互性的形式来表示算法和数据结构 —— 参数化

泛型能子啊编译时提供强大的类型检查,减少数据类型之间的显式转换,装箱操作和运行时的类型检查

泛型的类型参数T可以被看作是一个占位符,代表了某种可能的类型

namespace Test01
{
//创建一个泛型接口
public interface IGenericInterface<T>
{
T CreateInstance(); //接口中调用CreateInstance方法
}
//实现上面泛型接口的泛型类
//派生约束where T : TI(T要继承自TI)
//构造函数约束where T : new()(T可以实例化)
public class Factory<T, TI> : IGenericInterface<TI> where T : TI, new()
{
public TI CreateInstance() //创建一个公共方法CreateInstance
{
return new T();
}
}
class Program
{
static void Main(string[] args)
{
//实例化接口
IGenericInterface<System.ComponentModel.IListSource> factory = new Factory<System.Data.DataTable, System.ComponentModel.IListSource>();
//输出指定泛型的类型
Console.WriteLine(factory.CreateInstance().GetType().ToString());
Console.ReadLine();
}
}
}

在实例化泛型时可以使用约束对类型参数的类型种类施加限制,约束是使用where上下文关键字指定的

泛型方法,在声明中包括了类型参数T的方法

泛型方法可以使用多类型参数进行重载

namespace Test02
{
public class Finder //建立一个公共类Finder
{
public static int Find<T>(T[] items, T item) //创建泛型方法
{
for (int i = ; i < items.Length; i++) //调用for循环
{
if (items[i].Equals(item)) //调用Equals方法比较两个数
{
return i; //返回相等数在数组中的位置
}
}
return -; //如果不存在指定的数,则返回-1
}
}
class Program
{
static void Main(string[] args)
{
int i = Finder.Find<int>(new int[] { , , , , , , , }, ); //调用泛型方法,并定义数组指定数字
Console.WriteLine("6在数组中的位置:" + i.ToString()); //输出中数字在数组中的位置
Console.ReadLine();
}
} }
namespace Test03
{
class Program
{
static void Main(string[] args)
{
List<int> myList = new List<int>();
for (int i = ; i < ; i++)
{
myList.Add(i);
}
foreach (int i in myList)
{
Console.WriteLine(i);
}
Console.ReadLine();
}
}
}
namespace Test04
{
class Program
{
static void Main(string[] args)
{
myclass1<int> mclass1 = new myclass1<int>();
myclass2<int> mclass2 = new myclass2<int>();
Console.ReadLine();
}
class myclass1<T>
{
public myclass1()
{
Console.WriteLine("这是第一个泛型类");
}
}
class myclass2<T> : myclass1<T>
{
public myclass2()
{
Console.WriteLine("这是第二个泛型类");
}
}
}
}

System.IO 命名空间

File 类和Directory 类分别用来对文件和各种目录进行操作,可以被实例化,但不能被其他类继承

File类中的所有方法都是静态的,所以如果只想执行一个操作,那么使用File类中方法的效率比使用相应的FileInfo类中的方法更高

File类的静态方法对所有方法都执行安全检查,如果打算多次重用某个对象,可考虑FileInfo方法 —— 不用总是检查

if (File.Exists(textBox1.Text))       //使用File类的Exists方法判断要创建的文件是否存在
{
MessageBox.Show("该文件已经存在");
}
else
{
File.Create(textBox1.Text); //使用File类的Create方法创建文件
}

Directory 类,操作目录

if (Directory.Exists(textBox1.Text))          //使用Directory类的Exists方法判断要创建的文件夹是否存在
{
MessageBox.Show("该文件夹已经存在");
}
else
{
Directory.CreateDirectory(textBox1.Text); //使用Directory类的CreateDirectory方法创建文件夹
}

FileInfo类没有静态方法,该类中的方法可以用于实例化的对象

如果要在文件上执行几种操作(或重复操作),则实例化FileInfo对象效率更高

FileInfo finfo = new FileInfo(textBox1.Text);
if (finfo.Exists) //使用FileInfo对象的Exists属性判断要创建的文件是否存在
{
MessageBox.Show("该文件已经存在");
}
else
{
finfo.Create(); //使用FileInfo对象的Create方法创建文件
}
DirectoryInfo dinfo = new DirectoryInfo(textBox1.Text);  //实例化DirectoryInfo类对象
if (dinfo.Exists) //使用DirectoryInfo对象的Exists属性判断要创建的文件夹是否存在
{
MessageBox.Show("该文件夹已经存在");
}
else
{
dinfo.Create(); //使用DirectoryInfo对象的Create方法创建文件夹
}

获取文件信息

if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
textBox1.Text = openFileDialog1.FileName;
FileInfo finfo = new FileInfo(textBox1.Text); //实例化FileInfo对象
string strCTime, strLATime, strLWTime, strName, strFName, strDName, strISRead;
long lgLength;
strCTime = finfo.CreationTime.ToShortDateString(); //获取文件创建时间
strLATime = finfo.LastAccessTime.ToShortDateString(); //获取上次访问该文件的时间
strLWTime = finfo.LastWriteTime.ToShortDateString(); //获取上次写入文件的时间
strName = finfo.Name; //获取文件名称
strFName = finfo.FullName; //获取文件的完整目录
strDName = finfo.DirectoryName; //获取文件的完整路径
strISRead = finfo.IsReadOnly.ToString(); //获取文件是否只读
lgLength = finfo.Length; //获取文件长度
MessageBox.Show("文件信息:\n创建时间:" + strCTime + " 上次访问时间:" + strLATime + "\n上次写入时间:" + strLWTime + " 文件名称:" + strName + "\n完整目录:" + strFName + "\n完整路径:" + strDName + "\n是否只读:" + strISRead + " 文件长度:" + lgLength);
}

C#开发 —— 泛型,文件的更多相关文章

  1. C#进行Visio二次开发之文件导出及另存Web页面

    在我前面很多关于Visio的开发过程中,介绍了各种Visio的C#开发应用场景,包括对Visio的文档.模具文档.形状.属性数据.各种事件等相关的基础处理,以及Visio本身的整体项目应用,虽然时间过 ...

  2. 编译流程,C开发常见文件类型名

    编译流程 我们常说的编译是一个整体的概念,是指从源程序到可执行程序的整个过程,实际上,C语言编译的过程可以进一步细分为预编译->编译->汇编->链接 预编译是把include关键字所 ...

  3. iOS开发中文件的上传和下载功能的基本实现-备用

    感谢大神分享 这篇文章主要介绍了iOS开发中文件的上传和下载功能的基本实现,并且下载方面讲到了大文件的多线程断点下载,需要的朋友可以参考下 文件的上传 说明:文件上传使用的时POST请求,通常把要上传 ...

  4. Windows 10开发基础——文件、文件夹和库(一)

    原文:Windows 10开发基础--文件.文件夹和库(一) 主要内容: 1.枚举查询文件和文件夹 2.文本文件读写的三种方法——创建写入和读取文件 3.获得文件的属性 枚举查询文件和文件夹 先了解一 ...

  5. Java开发系列-文件上传

    概述 Java开发中文件上传的方式有很多,常见的有servlet3.0.common-fileUpload.框架.不管哪种方式,对于文件上传的本质是不变的. 文件上传的准备 文件上传需要客户端跟服务都 ...

  6. 05 python开发之文件处理

    05 python开发之文件处理 目录 05 python开发之文件处理 5 文件处理 5.1 字符编码 5.1.1 基本概念 5.1.2 发展历程 5.1.3 使用 5.2 文件处理基础 5.2.1 ...

  7. 【Win 10 应用开发】文件读写的三种方案

    本文老周就跟伙伴们探讨一下关于文件读写的方法.总得来说嘛,有三种方案可以用,而且每种方案都各有特色,也说不上哪种较好.反正你得记住老祖宗留给我们的大智慧——事无定法,灵活运用者为上. OK,咱们开始吧 ...

  8. PPT开发 * .pps 文件类型

    PPT开发, * .pps ,文件类型 PPS 这个格式也是PowerPoint文件格式的一种. pps的意思是说PowerPoint Show,POWER POINT会直接生成预览形式为你放映幻灯片 ...

  9. 【WP 8.1开发】文件选取器的使用方法

    在以往的WP7x/8.0开发中,我们使用选择器可以浏览并打开图片.音频.视频等一些特殊文件,在8.0 SDK中的运行时API(从Win 8 app中移植)尽管提供了Windows.Storage.Pi ...

随机推荐

  1. linux中的swap

    1. 也许你会经常遇到一个经典的swap大小设置问题(比如狗血的面试题). 很多人多会说内存的2倍.. 但是个人认为一般而言 swap 不要设置太大,最好不要超过4G. 2. 进程申请内存不足时,发现 ...

  2. 把ISO文件当作光盘挂载

    当不能挂载光盘或者U盘时候,只需要把ISO文件传到某个目录中,比如/data下,即可挂载,如下所示:   mount -o loop /data/rhel-server-6.3-x86_64-dvd. ...

  3. CentOS 7.4 安装 网易云音乐

    CentOS 7.4 安装 网易云音乐 本文包含: 安装dnf 编译gcc 5.4.0 安装各种包 安装网易云音乐贯穿全局; 安装环境: CentOS 7.4, kernel3.10.0, gcc4. ...

  4. Linux 文件系统详解

    作者: Paul Brown 译者: LCTT amwps290 这篇教程将帮你快速了解 Linux 文件系统. 早在 1996 年,在真正理解文件系统的结构之前,我就学会了如何在我崭新的 Linux ...

  5. 【习题 8-16 UVA - 1618】Weak Key

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 枚举N[q]和N[r]的位置 因为N[q]是最大值,且N[r]是最小值. 且它们是中间的两个. 枚举这两个可以做到不重复枚举. 然后 ...

  6. 【Codeforces Round #239 (Div. 1) B】 Long Path

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] DP,设f[i]表示第一次到i这个房间的时候传送的次数. f[1] = 0,f[2] = 2 考虑第i个位置的情况. 它肯定是从i- ...

  7. Android后台进程与前台线程间的区别使用

    博客出自:http://blog.csdn.net/liuxian13183,转载注明出处! All Rights Reserved ! 很早就翻译过Android API的一篇文章Android高级 ...

  8. UITableView去掉最后切割线的一种方法

    UITableView以style:UITableViewStylePlain方式创建时.仅仅要有cell,就会有一条黑线 哪怕至于一个cell也会有,如图 在网上找了集中方法,都不好使,比方http ...

  9. Virtual Directory in IIS

    https://www.iis.net/configreference/system.applicationhost/sites/site/application/virtualdirectory O ...

  10. failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found

    failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found 一.总结 一句话总结:这里出现的问题是我在博客园删除了一篇文章,时 ...