随笔分类 - C#
摘要:C#中可以对枚举类型用Description特性描述。 如果需要对Description信息获取,那么可以定义一个扩展方法来实现。代码如下:
阅读全文
摘要:new在c#中有三种用法: 1.实例化对象 2.泛型约束 3.用在方法前。new和override的区别在于:override用于重写父类的方法;new用于隐藏方法,它调用的方法来自于申明的类,如果申明的是父类,调用父类方法,声明的是子类,则调用子类的方法,如果申明的对象时匿名的,则默认调用子类的方
阅读全文
摘要:使用第三方SMTP服务器来发送邮件。如网易:SmtpClient sc = new SmtpClient("smtp.126.com"); sc.Credentials = new NetworkCredential("用户名", "密码"); sc.Send("from@126.com", "to@qq.com", "主题", "邮件正文");
阅读全文
摘要:在c#中"??"为空合并运算符,用于定义可空类型和引用类型的默认值。(1)如果此运算符的左操作数不为 null,则此运算符将返回左操作数;否则返回右操作数。例:a??b,当a为null时则返回b,a不为空时返回a本身。(2)右操作数类型必须与左操作数类型相同,或者可以隐式的转换为左操作数类型。否则编译错误。(3)空合并运算符为右结合运算符,即操作时从右向左进行组合的。例:"a??b??c"的形式按"a??(b??c)"计算。
阅读全文
摘要:泛型类 泛型类封装不是特定于具体数据类型的操作。 泛型类最常用于集合,如链接列表、哈希表、堆栈、队列、树等。 像从集合中添加和移除项这样的操作都以大体上相同的方式执行,与所存储数据的类型无关。对大多集合类的操作,推荐使用 .NET Framework 类库中所提供的类。 (1)泛型类可以继承具体类、封闭式构造、开放式构造基类。class BaseNode { }class BaseNodeGeneric<T> { }// 继承具体类class NodeConcrete<T> : BaseNode { }//继承封闭式构造基类//封闭式构造基类指基类类型参数指定具体类型c
阅读全文
摘要:泛型类型参数简介 在定义泛型类型和泛型方法时,常用到泛型类型参数,泛型类型参数是在实例化泛型时指定类型的占位符。泛型类型参数放在“<>”内。 泛型类型参数命名建议: (1)当泛型类型参数为单个字母时,建议用T表示。(1)当泛型类型参数用单词定义时,建议在单词前加T。private void PromptName<T>(T t) {}private void PromptName<Tuser>(Tuser user){}泛型类型参数约束在定义泛型类时,可以对在实例化泛型类时用于类型参数的类型种类施加限制。如果实例化泛型类时使用某个约束所不允许的类型来实例化类,
阅读全文
摘要:(1)自定义泛型链表类。 public class GenericList<T> { private class Node { //当前节点值 private T data; public T Data { get { return data; } set { data = value; } } //节点的下一个节点 private Node...
阅读全文
摘要:写入文本文件 class WriteTextFile { static void Main() { //如果文件不存在,则创建;存在则覆盖 //该方法写入字符数组换行显示 string[] lines = { "first line", "second line", "third line","第四行" }; System.IO.File.WriteAllLines(@"C:\testDir\test.txt", lines, Encoding.UTF8); ...
阅读全文
摘要:创建目录和文件 1、通过Path类的Combine方法可以合并路径。 string activeDir = @"C:\myDir"; string newPath = System.IO.Path.Combine(activeDir, "mySubDirOne"); 2、目录的创建。 创建目录时如果目录已存在,则不会重新创建目录,且不会报错。创建目录时会自动创建路径中各级不存在的目录。 (1)通过Directory类的CreateDirectory方法创建。 string activeDir = @"C:\myDir"; ...
阅读全文
摘要:在复制目录和文件时,如果需要显示操作进度框。可以引入Microsoft.VisualBasic组件实现。 (1)引用Microsoft.VisualBasic。(2)代码如下:using System;using System.Collections.Generic;using System.Text;using Microsoft.VisualBasic.FileIO; class FileProgressDialog { static void Main() { string sourcePath = @"...
阅读全文
摘要:在c#中可以遍历指定驱动器或指定目录下嵌套目录中的所有文件或者任意深度的文件。通过遍历可以检索string形式的目录名和文件名,也可以检索 System.IO.FileInfo 或 System.IO.DirectoryInfo 对象形式的其他信息。可以通过递归遍历和堆栈遍历两种方式实现目录遍历。递归遍历 递归算法简单,但嵌套树太深,可能会引起堆栈溢出异常。 /// <summary> /// 通过递归方式访问目录树 /// </summary> class RecursiveAccessDirectory { //声明并实例化一个字符串集合 ...
阅读全文
摘要:常用格式格式格式说明d月中的某一天。一位数的日期没有前导零。dd月中的某一天。一位数的日期有一个前导零。M月份数字。一位数的月份没有前导零。MM月份数字。一位数的月份有一个前导零。yy不包含纪元的年份。如果不包含纪元的年份小于 10,则显示具有前导零的年份。yyyy包括纪元的四位数的年份。h12 小时制的小时。一位数的小时数没有前导零。hh12 小时制的小时。一位数的小时数有前导零。H24 小时制的小时。一位数的小时数没有前导零。HH24 小时制的小时。一位数的小时数有前导零。m分钟。一位数的分钟数没有前导零。mm分钟。一位数的分钟数有一个前导零。s秒。一位数的秒数没有前导零。ss秒。一位数的
阅读全文
摘要:当有很多事件,大多数事件不会实现时,可以使用字典存储事件实例,这也是事件选择器的典型用法。 public delegate void EventHandler1(int i); public delegate void EventHandler2(string s); public class PropertyEvent { Dictionary<string, System.Delegate> eventTable; public PropertyEvent() { eventTable = new D...
阅读全文
摘要:在类中实现接口事件 可以在接口中声明事件,然后在类中实现该事件的引用。在为方法订阅事件时,可以订阅接口声明的事件,也可以订阅类中的事件。 class InterfaceEvent { static void Main(string[] args) { Shape s = new Shape(); IDrawingObject ido = s; //为HandlerShapeChanged方法订阅接口中声明的事件 ido.ShapeChanged += ...
阅读全文
摘要:(1)事件是特殊的委托,所以只可以在声明它的类中调用。在基类中声明一个事件,所以可以在基类中调用,而不能在派生类中直接调用。但有些情况下,需要在派生类中引用基类事件,实现方法是,在基类中定义一个受保护的方法引用事件,然后在派生类中重写基类方法,利用base关键字实现间接调用基类事件。(2)派生类调用基类事件。 class DerivedClassEvent { static void Main(string[] args) { Circle c = new Circle(10); Console.WriteLi...
阅读全文
摘要:(1)不生成事件数据。.NET Framework 类库中的所有事件均基于EventHandler委托。EventHandler是一个预定义委托,当不生成数据随事件一起发送时,该委托无需声明,因为它已在创建 C# 项目时包含的System命名空间中进行了声明。EventHandler委托定义如下: //sender 是引发事件的对象 //e 是不包含任何数据的事件数据对象。 public delegate void EventHandler(object sender, EventArgs e);不生成事件数据直接声明如下: public...
阅读全文
摘要:类或对象可以通过事件向其他类或对象通知发生的相关事情。 发送(或引发)事件的类称为“发行者”,接收(或处理)事件的类称为“订阅者”。一个简单事件实例 //发行者 public class Student { private string name; //定义一个带参委托 public delegate void DelegateRegisterFinish(string name); //定义一个事件 public event DelegateRegisterFinish EventRegisterFin...
阅读全文
摘要:委托声明和实例化 (1)通过与委托签名相同的方法的方法名声明实例化委托 //声明委托 public delegate void Del(string message); //与委托签名相同的方法 //签名相同即参数列表相同,返回值类型相同 public static void DelegateMethod(string message) { Console.WriteLine(message); } //通过与委托签名相同的方法实例化委托 Del ...
阅读全文
摘要:通过OLE DB for DB2驱动 string strSql = @"select phone_no from no_store where id<5"; string strConn = "Provider=IBMDADB2;Data Source=数据库名;UID=用户名;PWD=密码;"; using (OleDbConnection conn = new OleDbConnection(strConn)) { OleDbCommand cmd = new OleDb...
阅读全文
浙公网安备 33010602011771号