知识点整理——2019-5-31 读取保存文件对话框,泛型

文件的读取和创建对话框

读文件对话框:

            OpenFileDialog fileDialog = new OpenFileDialog();
            fileDialog.Filter = "DAT文件(*.dat)|*.dat|RAW文件(*.raw)|*.raw"; //选择文件
            fileDialog.Title = "选择文件"; //获取或设置文件对话框标题
            fileDialog.RestoreDirectory = true;
            if (fileDialog.ShowDialog() == DialogResult.OK)
            {
                textFilePath.Text = fileDialog.FileName;
            }

保存文件对话框

            SaveFileDialog Savefile = new SaveFileDialog();
            Savefile.Title = "保存文件"; //获取或设置文件对话框标题
            Savefile.InitialDirectory = @"C:\";//默认路径
            Savefile.Filter = "DAT文件(*.dat)|*.dat|RAW文件(*.raw)|*.raw"; //选择文件类型
            Savefile.ShowDialog();
            string filePath = Savefile.FileName;

泛型,万物皆可盘

泛型的优点1:性能好

值类型存储在上,C#结构是值类型,值类型转换为引用类型称为装箱

引用类型存储在上,C#类是引用类型,引用类型转换为值类型称为拆箱

装箱的值类型可使用拆箱操作转换为值类型,拆箱则需要类型强制转换运算符。

泛型类List是System.Collections.Generic命名空间下的类。

不使用对象,在使用时定义类型。

泛型的优点2:类型安全

泛型类型T定义允许使用的类型,如果要加入其他类型数据,编译器就会报错,不编译。

泛型的优点3:允许更好的重用二进制代码;

  var list = new List();
  var strlist = new List();
  var myClasslist = new List();
  myClasslist.Add(new MyClass());

泛型类型可以在一种语言中定义,在其他.Net语言中重复使用(万物皆可盘)

泛型类

命名规则:

1.泛型类型的名称用字母T作为前缀;

2.泛型类型允许任意替代,且若只使用了一个泛型类型,就可以用字符T作为泛型类型的名称;

public class List { }
public class LninkedList { }

3.若有特定要求,或使用了两个以上,则区分开来。

public delegate void EventHandler(object sender, TEnventArgs e);
public delegate TOutput Converter(TInput from);
public class SortedList { }

不可将null 赋予泛型类型,可使用default关键字将0赋给值类型,将null赋给引用类型;

若泛型不需要Object类的功能,但需要其某些方法,可以定义约束

约束:定义约束 where……

public class DocManager where TDocument : IDocument

泛型支持的其他约束:约束可以合并

约束 说明
where T : struct 对于结构约束,类型T必须是值类型
where T : class 类的约束指定类型T必须是引用类型
where T : IFoo 指定类型T必须实现接口IFoo
where T : Foo 指定类型T必须派生自基类Foo
where T : new() 这是一个构造函数约束,指定类型T必须有一个默认的构造函数
where T1 : T2 这个约束也可以指定,类型T1派生自泛型类型T2,又称“裸类型约束”

泛型类型可以实现泛型接口,也可以派生自一个类,泛型类可以派生自泛型基类。

派生类可以是泛型类或者非泛型类。

泛型类的静态成员只能在类的一个实例中共享。如果实现两个类对象,则会存在两组静态字段。

 

         public class StaticDemo
        {
            public static int x;
        }
        static void Main(string[] args)
        {
            StaticDemo.x = 4;
            StaticDemo.x = 5;
            Console.WriteLine(StaticDemo.x);
            Console.WriteLine(StaticDemo.x);
            var dm = new DocManager();
        }

泛型可以定义接口,.net 有很多泛型接口:IComparable ICollectionIEquatable 

协变和抗变是对参数和返回值的类型进行转换。

参数类型是协变的,A派生自B,则,A可以作为参数,代替B传递。

方法的 返回值类型是抗变的。当方法返回B时,不可以使用A代替。但是,当方法返回A时,可以用B代替。

泛型接口的协变:

如果泛型类型用out关键字标注,泛型接口就是协变的:

        public interface IDemo
        {           
           T this[int index] { get; }
            int count { get; }   
        }

如上例,返回值类型只能为T,如果接口使用了索引器,就把泛型类型T传递给方法,并从方法中检索这个类型。泛型类型必须定义为不变的,不使用out in 标注,就可以把类型定义为不变的。

合并运算符:??,为转换定义了一个默认值,以防可空类型的值是null。 int y1 = x1??0; 

泛型接口的抗变:

如果泛型类型用in关键字标注,则泛型接口就是抗变的。

  public interface IDemo
  {
     void Show(T item);
  }

如上,接口只能把泛型类型T用作其方法的输入。

泛型结构

不继承。 Nullable

泛型方法。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

    
 

你可能感兴趣的:(C#,C#,Winform)