深入.Net框架

1.C#工具安装 .NET Framework 4.0 出现错误解决方法
(1)运行cmd
(2)输入net stop WuAuServ
(3)将X:\Windows\SoftwareDistribution\这个文件夹重命名为SDold       注释 : X 是系统盘
(4)运行cmd,并输入net start WuAuServ
(5)以管理员身份运行.NET Framework 4.0的安装程序

第一章
(1).Ping地址是否畅通
using System.Net.NetworkInformation //引用此命名空间
Ping pingsender = new Ping(); //New此对象
PingReply reply = pingsender.Send(this.txtIP.Text.ToString()); //根据填写的ip地址 , 去测试是否畅通,返回一个状态
if (reply.Status == IPStatus.Success) //如果状态等于畅通 ,接下来你懂得


(2)网络上下载图片(要求有网络)
using System.Net;
using System.IO; //引用命名空间
            string address = " http://titanimg.titan24.com/game/20110808/10ae4ffd5a81d639ed5518acda8a7862.jpg"; //图片网站地址
            string pictureaddress = "10ae4ffd5a81d639ed5518acda8a7862.jpg";//图片文件名
            try
            {
                WebClient web = new WebClient(); //创建此对象
                if (!File.Exists(pictureaddress))  //如果已经下载此图片 就不会再下载了
                {
                    web.DownloadFile(address, pictureaddress); //对象的下载方法,
                }
                this.picTu.Image = Image.FromFile(pictureaddress); //把图片路径给当前的图片控件

(3)窗体上显示网页
URL.StartsWith("http://") && URL.StartsWith("https://")  首先判断输入的地址是否包含http
web.Navigate(URL);//设置控件的地址

第二章
(1) struct结构

public struct st
{
   //结构体    结构中可以有字段也可以有方法。 字段不能赋初始值
}

public Main () //另一个方法中使用它
{
     st s; 创建它 无须用New
}

(2)params  当不知道具体要几个参数时
public static int AddNumber(params int[] arr)
{
    return arr;
}
//另一个方法调用上面方法时
{
  AddNumber(1,3,2);    //可以传任何个数的参数
  AddNumber(1,2); tnn
}



 
第三章 (5种集合的增删查 使用方法) using System.Collections

(1)集合
       public static ArrayList list = new ArrayList(); // 声明
       list.Capacity 属性 指list存贮空间大小 动态的 超出就翻倍扩展
       list.Tro,TpSoze(); 去掉多余空间
       list.add(object); //添加一个对象
       list.RemoveAt(int) //移除指定下标的对象
       object o =(object)list[0]; //获取指定下标的对象,然后你懂得
       foreach (object c in list) { }//获取集合里的全部值

(2)哈希集合(可以通过键来查询指定元素)
       public static Hashtable li = new Hashtable(); //声明
       li.add(键类型变量,object); //键代表这个对象的唯一列 能区分每个对象的,可以是任何数据类型
       li.Remove(键类型变量);  //通过键来删除指定的对象
       object c = li[键类型变量]; //通过键 来获取指定对象
       foreach (object o in li.Keys) {} //获取集合里的全部键
       foreach (object o in li.values){} //获取集合李的全部值
       li.Contains(键类型变量) //判断是否包含这个键的对象

(3)泛型集合,数据更稳定安全
       public static List<T> list1 = new List<T>(); //声明 T代表任意数据类型
       list1.Add(T类型变量); //添加只能添加这个数据类型的变量 ,添加其他的会直接报错
       list1.RemoveAt(indenx); //移除指定下标的对象
       list1.Remove(T类型变量);   //移除只能移除这个数据类型的变量 ,移除其他的会直接报错
       T类型 b = list1[0]; //获取指定下标对象,不需要转换了,T同上
       foreach(T类型 d in list1){ } //获取集合里的每个对象, T同上

(4)泛型哈希集合(可以通过键来查询指定元素) 数据更安全
       public static Dictionary<K, V> li2 = new Dictionary<K, V>();  //声明   K代表集合中Key(键)数据类型,V代表Value(值)的数据类型  同(2)
       li2.Add(K类型变量,V类型变量); //添加 必须以K类型的变量和V类型的变量来添加
       li2.Remove(K类型变量); //删除 必须以K类型的变量来删除指定对象!
       V类型 p = li2[K变量]; // 根据Key键 获取指定的对象
       foreach (V类型 v in li2.Keys) { } //获取集合里的全部键
       foreach (V类型 v in li2.Values) { }//获取集合李的全部值

(5)泛型类
      public class MyStruct<T>
      { public T number}
      
      MyStruct<int> my = new MyStruct<int>();

(6)二维 三维数组
       int[,] arr1 = new int[2,3]{{1,2,3},
                                  {4,5,6}};  对等2维数组
       int[][] arr2 = new int[2][];
      
//交错二维数组
      int[][] arr2 = new int[2][];
            arr2[0] = new int[] { 1, 2, 3 };
            arr2[1] = new int[] { 4, 5 };
                                 //小于数组行数
            for (int i = 0; i < arr2.GetLength(0); i++)
            {                       //小于每行的长度(个数)
                for (int j = 0; j < arr2[i].Length; j++)
                {
                    Console.Write("\t{0}",arr2[i][j]);
                }
                Console.WriteLine();
            }

(6) 随机数种子
    Random rd = new Random(DateTime.Now.Millisecond* DateTime.Now.Second); //随机种子
    rd.Next(1000, 10000);
      
      
第4章
(1) 构造函数,  //注: 就是实例化对象就默认赋的初始值
    public 类名()
   {
      赋值。。。
   }

   
(2) 方法重载, 就是在一个类中写名称相同的方法 但是参数列表必须不同 如:

    public void show(int num1,int num2){}
    public void show(string num1,string num2){}

第6章
(1) 继承
   class Violin : Instrument  前面是子类 后面继承父类 继承后拥有父类的属性方法

(2)构造函数继承
   //父类   public Employee(int Age,Gender Sex,string ID,string Name, List<Job> WorkList)
           {
            this.Age = Age;
            this.Sex = Sex;
            this.ID = ID;
            this.Name = Name;
            this.WorkList = WorkList;
            }
   //子类   public PM(int Age,Gender Sex,string ID,string Name, List<Job> WorkList,int Year)
            :base(Age,Sex,ID,Name,WorkList)
            {
            this.YearOfExperience = Year;
            }
        不需要再一一赋值 可以直接传递值,子类自己的字段需要赋值
     base --- 父类对象

(3)修饰符
     修饰符      类内部  子类  其他类
     public      YES      YES    YES
     protected   YES      YES    NO
     private     YES      NO     NO
     internal 只能被当前程序集中的成员访问 不能被其他程序集的成员访问
     protected  internal (保护的与程序集的:可以被当前的累或者他的子类访问,也可以被当前的程序集中的成员访问,而不能被其他程序集中无关的类访问)

(4)继承的传递性
    class a
    class b:a
    class c:b
    c同样具有a的东西

(5)override  ,  virtual 虚方法

第7章

abstract  抽象方法

抽象方法必须包含在抽象类里面

sealed 密封方法 或者密封类 

sealed public overrude void Save()  加上关键字sealed  他就是最终方法 不能被子类所重写


(1) 接口的定义

public interface IFly
{
      void Fly();
}

接口中只能包含
1.抽象的属性
2.抽象的方法
3.抽象的索引器
4.抽象的事件

接口中不能包括字段和常量

(2)反射
using System.Reflection; 引用这个
string className = "Demo8_2." + factoryType + "Factory";
//Load方法表示要加载的程序集
//CreateInstance方法表示要在那个程序集上去创建的命名空间中的某个类对象。
   facotry = (AnimalFactory)Assembly.Load("Demo8_2").CreateInstance(className);




(3)添加节点
tvStudent.Nodes.Clear();
    foreach (Student b in Student.analyze())
   {
    reeNode tn = new TreeNode(b.StudentName);
    n.Nodes.Add(b.Age.ToString());
    tn.Nodes.Add(b.Hobby);
    his.tvStudent.Nodes.Add(tn);
    }

第11章  文件操作 using System.IO;
1.(写入文件内容)
            //创建文件流
            FileStream fs = new FileStream(this.textBox1.Text, FileMode.Create);
            //创建写入器
            StreamWriter sw = new StreamWriter(fs);
            //将录入的内容写入文件
            sw.Write(this.textBox2.Text);
            //关闭写入器
            sw.Close();
            //关闭文件流
            fs.Close();                                                             //FileStream 的第1个参数是文件的路径,第二个是打开文件的类型(枚举型)
                                                                                    //StreamWriter和StreamReader第1个参数是文件流对象,
                                                                                    //Encoding是编码对象,他的枚举是编码类型。解决乱码问题 如:
                                                                                      UTF8(系统默认) ASCII GB2312 ANSI
2.(读取文件内容)
            //创建文件流
            FileStream fs = new FileStream(this.textBox1.Text, FileMode.Open);  加属性, FileA
Ccess.Read ??  FileShare.None //对文件的占用性
            //创建读取器
            StreamReader sr = new StreamReader(fs, Encoding.Default);

            //将读取的内容写入程序
            this.textBox2.Text = sr.ReadToEnd();
            //关闭读取器
            sr.Close();
            //关闭文件流
            fs.Close();

3.(目录[文件夹]和文件操作)
                DirectoryInfo di = new DirectoryInfo("D:\\"); //获取这个文件夹  参数是文件夹路径  
                FileInfo[] fi = di.GetFiles();  //获取这个文件夹下的所有文件
                DirectoryInfo[] dire = di.GetDirectories(); //获取这个文件夹下的所有文件夹

                foreach (FileInfo f in fi)
                {
                    MyFile mf = new MyFile();
                    mf.FileName = f.Name; //文件名
                    mf.FileLength = float.Parse(Math.Round((double)(f.Length / 1024), 2).ToString()); // 大小
                    mf.FileType = f.Extension; //获取文件扩展名部分字符串
                    mf.FilePath = f.FullName;// 获取文件或文件夹完整路径
                    list.Add(mf);
                }
                Exists  判断文件或者文件夹是否存在,
                string[] logicalDrives = Directory.GetLogicalDrives();  获取所有盘符

4 以字节流来读取数据
                    fs = new FileStream(this.txtFileName.Text, FileMode.Open);
                    byte[] bytes = new byte[fs.Length];
                    fs.Read(bytes, 0, bytes.Length);
                    System.Text.Encoding encode = System.Text.Encoding.UTF8;
                    string s=encode.GetString(bytes);
                    this.txtContent.Text = s;ok


12章 序列化 反序列化

1.(序列化对象)
            注意:1.保存的文件格式后缀需是bin
                  2.要保存的对象和他关联的对象必须给它设置特性  [Serializable]
            FileStream fs = new FileStream("save.bin", FileMode.Create);
            //二进制方式
            BinaryFormatter bf = new BinaryFormatter();         
            //序列化存贮对象
            bf.Serialize(fs, this.seria);
            fs.Close();
2(反序列化还原对象)
            FileStream fs = new FileStream("save.bin", FileMode.Open);
            BinaryFormatter bf = new BinaryFormatter();
            //把对象还原成object形, 强转就OK了。  数据和序列化之前一样
            this.seria =(SavingInfo)bf.Deserialize(fs);
            fs.Close();

3(特性) . 特性就是在 类 方法 字段前面加 [XXXX]
            [Serializable]  //标识可序列化
            [Obsolete("不要使用旧的方法。",True)]  //标识此方法或类已经过期。。。第二个bool参数为真 就会报错。 为假 则出警告
            [NonSerialized] //标识不可序列化

4(克隆) ICloneable 接口 , MemberwiseClone();//克隆某个对象!
       (1).实现这个接口,里面写具体的克隆方法

5.(动态加载控件和绑定事件)
        private List<Remind> List = new List<Remind>();
        public void SetRemind(List<Remind> list)
        {
            this.List = list;
            int startX = 100; //设置控件的X坐标
            int startY = this.lblMessage.Location.Y + lblMessage.Height + 5; //设置控件的Y坐标
            int i = 0;//循环用变量
            int resizeHeight = 25;//窗体的高度
            foreach (Remind tv in list)
            {
                this.Height += resizeHeight;
                Label lb = new Label(); //创建一个lbl
                lb.Text = tv.tvProgram.ProgramName;//设置lbl的文本值
                lb.Tag = tv; //设置lbl的Tag值
                lb.ForeColor = System.Drawing.Color.Red; //设置lbl的文字颜色 (可以从自动生成代码处复制)
                lb.Visible = true; //设置lbl是否可见
                lb.Width = 350; //设置lbl的宽度
                lb.Font = new System.Drawing.Font("隶书", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); //设置lbl的字体(可以从自动生成代码处复制)
                lb.Location = new Point(startX, startY + i * (5 + lb.Height));//设置lbl的位置
                this.Controls.Add(lb); //当前窗体的添加控件方法 , 把lbl添加进去
                lb.Click += new EventHandler(lb_Click);  //动态绑定事件 代码打到=符号的时候 按两次Tab键 OK了
                i++;
            }
        }

        public void lb_Click(object sender, EventArgs e)
        {
            Label lb = sender as Label;   //sender就是当前选中的控件对象  e是当前选择控件的描述
            frmMain.fb.awmBoF.URL = (lb.Tag as Remind).tvProgram.Way;
            frmMain.fb.Show();
           
        }

14章 影院售票系统
  1.(枚举类型的转换)
     //把字符串转换为枚举类型 第1个参数是枚举类型,第2个是要转换得字符串,返回object型
     m.movieType = (Movie.MovieType)Enum.Parse(typeof(Movie.MovieType), node["Type"].InnerText);
     //把枚举转换为字符串
     this.lblMovieTypeShow.Text = si.movie.movieType.ToString();


2.(断言) using System.Diagnostics; //引用命名空间
          Debug.Assert() 方法断言  如果断言失败 则程序退出。
         
3.(条件编译)     结构和if else if  很相似
          #define D  定义符号
          #define V
#if(D&&V)                         //如果此符号存在则为True 则运行该代码段
            Console.Write(1);
#elif(!D&&V)
            Console.Write(2);
#elif(D&&!V)
            Console.Write(3);
#else
            Console.Write(4);
#endif         //结束 

猜你喜欢

转载自514041590.iteye.com/blog/2212454