C#开发 —— 泛型,文件

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

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

泛型的类型参数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 = 0; i < items.Length; i++)                        //调用for循环
            {
                if (items[i].Equals(item))                            //调用Equals方法比较两个数
                {
                    return i;                                    //返回相等数在数组中的位置
                }
            }
            return -1;                                        //如果不存在指定的数,则返回-1
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            int i = Finder.Find<int>(new int[] { 1, 2, 3, 4, 5, 6, 8, 9 }, 6);    //调用泛型方法,并定义数组指定数字
            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 = 0; i < 10; 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#开发 —— 泛型,文件

时间: 2024-10-16 11:59:51

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

IOS开发之文件上传

IOS开发之文件上传 在移动应用开发  文件形式上传是必不可少的,最近把IOS这块文件上传文件代码简单的整理一下,如果大家有需要安卓这边的代码,本人也可以分享给大家!QQ群:74432915  欢迎大家一起探讨 首先本demo采用网上开源框架 AFNetworking  源码:http://download.csdn.net/detail/wangliang198901/7809439 将整个框架导入IOS新建立的工程中 在FKAppDelegate.h声明 如下: #import <UIKit

建立开发板文件,测试编译环境

U-Boot没有支持S3C2440,移植仍是U-Boot支持的SBC2410的文件作为蓝本进行移植.所以移植要做的就是针对S3C2440和S3C2410的不同,以及SBC2410和mini2440开发板的外设不同作相应的修改,并增加新的功能. 6.1 建立开发板文件,测试编译环境 6.1.1 修改顶层Makefile 目的:定义交叉编译工具链和开发板配置选项. CROSS_COMPILE = arm-linux- #set default to nothing for native builds

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

感谢大神分享 这篇文章主要介绍了iOS开发中文件的上传和下载功能的基本实现,并且下载方面讲到了大文件的多线程断点下载,需要的朋友可以参考下 文件的上传 说明:文件上传使用的时POST请求,通常把要上传的数据保存在请求体中.本文介绍如何不借助第三方框架实现iOS开发中得文件上传. 由于过程较为复杂,因此本文只贴出部分关键代码. 主控制器的关键代码: 复制代码代码如下: YYViewController.m#import "YYViewController.h" #define YYEnc

iOS开发 plist文件的操作

iOS开发 plist文件操作 浏览:6287 | 更新:2015-02-05 19:57 1 2 3 4 5 分步阅读 iOS开发常用数据存储方式有:NSKeyedArchiver.NSUserDefaults.Write写入方式.SQLite.为了简洁明了的存储和可视化展现数据,以文件形式存储数据是很有必要的.plist文件在iOS开发中属于Write写入方式,可以以Property List列表形式显示,也可以以xml格式显示.对于数据管理是很方便的.掌握使用plist文件数据操作很有必要

Android开发 打开文件 选择文件对话框

原文地址:http://blog.csdn.net/trbbadboy/article/details/7899424; 因项目需要打开文件,因此做了一个打开文件的对话框,现在把这部分的代码共享出来了. 首先是一个回调接口,该接口在文件选择完毕的通知调用者进行如果何种操作.文件接口声明,如下: [java] view plaincopyprint? // filename: CallbackBundle.java package com.example.openfiledemo; import 

豹哥嵌入式讲堂:ARM Cortex-M开发之文件详解(8)- 镜像文件(.bin/.hex/.s19)

大家好,我是豹哥,猎豹的豹,犀利哥的哥.今天豹哥给大家讲的是嵌入式开发里的image文件(.bin, .hex, .s19). 今天这节课是豹哥<ARM Cortex-M开发之文件详解>主题系列的最后一节课(突然有点不舍,要告别的感觉,咳咳,让豹哥整理下情绪先).今天豹哥主要讲的是工程开发最终的output文件,即image文件.image文件也叫镜像文件,这个文件主要包含的是只有芯片能够解释执行的二进制机器码数据,这些数据其实在前面介绍的relocatable.list.executable

IOS开发之文件压缩和解压缩

前言: QQ表情包就用到了解压缩,从网络下载的那么多表情文件格式并不是一个一个图片文件,而是多个图片压缩而成的表情压缩包.下面介绍的是iOS开发中会用到的压缩和解压缩的第三方框架的使用. 注意: 这个第三方框架代码文件夹是SSZipArchive,使用cocoapods搜索也是搜索SSZipArchive.但是如果你在github上直接搜索ZipArchive,搜到点赞数最多,维护频繁的ZipArchive库,然后下载代码,其实就是这个SSZipArchive. 第三方框架github网址:ht

04springMVC结构,mvc模式,spring-mvc流程,spring-mvc的第一个例子,三种handlerMapping,几种控制器,springmvc基于注解的开发,文件上传,拦截器,s

 1. Spring-mvc介绍 1.1市面上流行的框架 Struts2(比较多) Springmvc(比较多而且属于上升的趋势) Struts1(即将被淘汰) 其他 1.2  spring-mvc结构 DispatcherServlet:中央控制器,把请求给转发到具体的控制类 Controller:具体处理请求的控制器(配置文件方式需要配置,注解方式不用配置) handlerMapping:映射处理器,负责映射中央处理器转发给controller时的映射策略 ModelAndView:服务

Linux系统开发 2 文件IO open() close() read() write() perror() lseek() fcntl() ioctl()

[本文谢绝转载,原文来自http://990487026.blog.51cto.com] 大纲 Linux系统开发 man 文档的使用 文件IO open() 创建文件,指定权限位 open() 接收参数 创建文件 open() 传两个参数 第三个参数从内存取垃圾值 write()函数 向文件写数据 write()函数的覆盖操作 open()函数文件的追加 open() 创建文件,如果文件已经存在,就报错 测试一个程序最多能创建1021个文件,3个STDIN STDOUT STDERR已经存在了