在那个桃花盛开的季节,个人总结深入

作者: 网络编程  发布:2019-09-14
  1. 对象间的交互 45

个人总结深入.NET平台和C#编程,

  前言:学习C#编程应该有几个月了,作为一个菜鸟,没有资格来评论什么。只有对自己所学进行一个总结,可能有不严谨的地方,万望谅解。

         一·深入.NET框架

      .NET框架(.NET Framework),他是开发.NET应用程序的核心基础。

.NET框架的体系结构

  支持C#、VB、.NET、c 、等语言的开发,也就是我们所说的跨语言开发。

.NET框架具有两个主要组件:CLR和FCL。(CLR是Common Language Runtime即公共语言进行时;FCL是Framework Class Library即框架类库)

.NET框架核心类库及其功能

金沙澳门官网 1

 

类和对象

类定义了一组概念模型,而对象是真实的实体。

set访问器只写;get访问器只读。

在vs中自动属性prop 双击Tab键

封装

 1.保证数据的安全性。

2.提供清晰的对外接口

3.类内部可以任意修改,不影响其他类。

类图

金沙澳门官网 2

 

二.深入C#数据类型

值类型应用类型

值类型包括基本数据类型,和枚举类型,结构体等。

引用类型包括string 数组,类和接口。

结构体:

可以有字段,可以有方法。

定义时字段不能被赋初值。

不用new。声明结构对象后必须给结构成员赋初值。

拆箱和装箱

示例:

int a=1;

object o=i;//装箱

int j=(int)o;//拆箱

值传递和引用传递

引用类型作为参数时:
1、在修改变量本身时,结果类似于值传递,即不会改变传递前的变量的值
2、在修改变量的属性或字段时,才是引用传递,会影响到传递前的变量的值
3、参数使用了ref后,才是真正的引用传递,不管修改变量本身还是修改变量的属性或字段,都会影响到传递前的变量的值

值传递:传的是对象的值拷贝。(即函数内参数对象是调用时传递的对象的栈中对象的拷贝。)
引用传递:传的是栈中对象的地址。(即函数内参数对象与调用时传递的对象完全是同一栈中对象。)

三.使用集合组织相关数据

System.Collections 命名空间包含接口和类,这些接口和类定义各种对象(如列表、队列、位数组、哈希表和字典)的集合。
System.Collections.Generic 命名空间包含定义泛型集合的接口和类,泛型集合允许用户创建强类型集合,它能提供比非泛型强类型集合更好的类型安全性和性能。
System.Collections.Specialized 命名空间包含专用的和强类型的集合,例如,链接的列表词典、位向量以及只包含字符串的集合。

using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            ArrayList list = new ArrayList();

            Console.WriteLine("遍历方法一:");
            foreach (int item in list)//不要强制转换
            {
                Console.WriteLine(item);//遍历方法一
            }

            Console.WriteLine("遍历方法二:");
            for (int i = 0; i < list.Count; i  )//数组是length
            {
                int number = (int)list[i];//一定要强制转换
                Console.WriteLine(number);//遍历方法二

            }
        }
    }
}

  1、哈希表(Hashtable)简述
     在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似key/value的键值对,其中key通常可用来快速查找,同时key是区分大小写;value用于存储对应于key的值。Hashtable中key/value键值对均为object类型,所以Hashtable可以支持任何类型的key/value键值对.

2、哈希表的简单操作
在哈希表中添加一个key/value键值对:HashtableObject.Add(key,value);
在哈希表中去除某个key/value键值对:HashtableObject.Remove(key);
从哈希表中移除所有元素:                HashtableObject.Clear(); 
判断哈希表是否包含特定键key:         HashtableObject.Contains(key);
遍历

foreach(DictionaryEntry item in Hashtable)

{

item.Key;

item.Values;

}

泛型最常见的用途是泛型集合,命名空间System.Collections.Generic 中包含了一些基于泛型的集合类,使用泛型集合类可以提供更高的类型安全性,还有更高的性能,避免了非泛型集合的重复的装箱和拆箱。 
    很多非泛型集合类都有对应的泛型集合类,下面是常用的非泛型集合类以及对应的泛型集合类:

非泛型集合类 泛型集合类
ArrayList List<T>
HashTable DIctionary<T>
Queue Queue<T>
Stack Stack<T>
SortedList SortedList<T>

 单列泛型集合: List<Object> list=new List<Oibject>(); 遍历 for(int i=0;i<list.Count;i ) {   Console.WriteLine(list[i]); } foreach(Object item in list) {   Console.WriteLine(item); } 双列泛型集合 Dictionary<object,object> dic=new Dictionary<object,object>(); 遍历 foreach(KeyValuePair<object,object> item in dic) { Console.WriteLine(dic.Key); Console.WriteLine(dic.Value); } foreach(Object item in dic.Keys) {  Console.WriteLine(item);   Console.WriteLine(dic[item].Value); } foreach(Object item in dic.Values) {  Console.WriteLine(item); } 四.深入类的方法 1.构造函数 (1.)方法名与类名相同 (2.)没有返回值 (3.)主要完成对象初始化工作 2.无参构造函数的 语法 访问修饰符 类名() {  //方法体 }  3.带参构造函数 语法 访问修饰符 类名(参数列表) {  //方法体 }  隐式构造函数 系统自动给类分配一个无参构造函数。 构造函数的重载 无参构造和带参构造可以看成是方法重载。 方法重载 (1.)方法名相同 (2.)方法参数类型不同或者参数个数不同 (3.)在同一个类中 对象交互 每个类都有自己的特性和功能,我们把它们封装为属性和方法。对象之间通过属性和方法进行交互。可以认为方法的参数及方法的返回值都是对象间相互传递消息。 个人理解,他为什么叫对象间交互呢。因为是对象间进行的属性方法交互。而类之间进行的继承多态接口。  六.初识继承和多态 继承概述 1.什么是继承 (1)移除类的冗余代码 (2)集成的概念 2.base关键字和protected修饰符

public class Person
{
protected string ssn = "111-222-333-444" ;
protected string name = "张三" ;
public virtual void GetInfo() {
Console.WriteLine("姓名: {0}", name) ;
Console.WriteLine("编号: {0}", ssn) ;
}
}
class Employee: Person
{
public string id = "ABC567EFG23267" ;
public override void GetInfo() {
// 调用基类的GetInfo方法:
base.GetInfo();
Console.WriteLine("成员ID: {0}", id) ;
}
}

  

3.子类构造函数 (1)隐式调用父类构造函数 (2)显示调用父类构造函数  继承的使用 继承、封装和多态是面向对象编程的重要特性。
其成员被继承的类叫基类也称父类,继承其成员的类叫派生类也称子类。
派生类隐式获得基类的除构造函数和析构函数以外的所有成员。 派生类只能有一个直接基类,所以C#并不支持多重继承,但一个基类可以有多个直接派生类。
继承是可以传递的。
私有成员其实已经被继承了,但是它们却不可以被访问,因为私有成员只能被声明它们的类或结构体中才可访问,所以看上去像是没有被继承。**

 如果基类中是没有参数的构造函数

如果基类中是没有参数的构造函数,在派生类中可以自定义有参数的构造函数 如果基类定义了带有参数的构造函数,那么此构造函数必须被执行,且在派生类中实现该构造函数,此时我们可以使用base关键字   如果派生类的基类也是派生类,则每个派生类只需负责其直接基类的构造,不负责间接基类的构造,
并且其执行构造函数的顺序是从最上面的基类开始的,直到最后一个派生类结束。
is a的应用 由于SE和PM都继承Employee,即SE is a Employee,PM is a Employee. 继承的价值: (1.)集成模拟了现实世界关系,oop中强调一切皆对象,这符合我们面向对象编程的思考方式 (2.)继承实现了代码复用 (3.)集成使程序结构更清晰 多态 解决集成带来的问题 虚方法 使用virtual关键字修饰的方法,称为虚方法。虚方法有方法体 语法 访问修饰符 virtual 返回类型 方法名()  {     //方法体  } 重写虚方法 访问修饰符 override 返回值类型 方法名() { //方法体 } 什么是多态 多态按字面的意思就是“多种形态”,指同一操作作用不同的对象时,可以有不同的解释,产生不同的结果。 实现多态 (1.)实现方法重写 (2.)定义父类变量 七.深入理解多态

里氏替换原则

在一个软件系统中,子类可以替换父类出现的位置,而对软件的功能没有任何影响,就称为里氏替换原则。

子类可以扩展父类的功能,但不能改变父类原有的功能。 子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法。 子类中可以增加自己特有的方法。

当子类的方法重载父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数更宽松。

当子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类更严格。

看上去很不可思议,因为我们会发现在自己编程中常常会违反里氏替换原则,程序照样跑的好好的。所以大家都会产生这样的疑问,假如我非要不遵循里氏替换原则会有什么后果?

后果就是:你写的代码出问题的几率将会大大增加。

例如: Father son=new Son();

C#中有两个关键字可以提现里氏替换原则:is和as操作符 is操作符用于检查对象和指定的类型是否兼容。 as操作符主要用于两个对象之间的类型转换。

父类类型做参数

示例: 先给几个类: 1.父类,交通工具类。有一堆属性。 2.汽车类,继承父类。 3.地铁类,继承父类。 4.员工类。员工乘坐交通工具回家!员工回家的方法,参数是父类对象!

然后建一个员工的集合,初始化员工. 扔到集合里。就和=可以用集合的项点出员工回家的方法传一个子类! 总结这就是子类指向父类!也就是所谓的里氏替换原则!

抽象类和抽象方法

如果一个类不与具体的事物相联系,而只是表达一种抽象的概念,仅仅是作为其派生类的一个基类,这样的类就是抽象类,在抽象类中声明方法时,如果加上abstract时就是抽象方法

抽象类与非抽象类的主要区别:

·抽象类不能直接被实例化

·抽象类中可以包含抽象成员,但非抽象类中不可以

·抽象类不能是密封的或者静态的

抽象方法是一个没有实现的方法,通过在定义方法时增加关键字abstract可以声明抽象方法。

抽象方法语法

访问修饰符 abstract 返回值类型 方法名();

注意:抽象方法没有闭合的大括号,而是直接跟了个“;”也就是说,它没有包括方法执行逻辑的方法体!

抽象类的定义

语法: 访问修饰符 abstract class 类名{}

注意: 抽象类提供的抽象方法,这些方法只有定义,如何实现都由抽象类的非抽象子类完成。

抽象类和抽象方法的应用

如何实现一个抽象父类派生的子类 当从一个抽象父类派生一个抽象子类时,子类将继承父类的所有特征,包括它未实现的抽象方法。抽象方法必须在子类中实现,除非他的子类也是抽象类。

抽象类和抽象方法的应用

如何实现一个抽象父类派生的子类 当从一个抽象父类派生一个抽象子类时,子类将继承父类的所有特征,包括它未实现的抽象方法。抽象方法必须在子类中实现,除非他的子类也是抽象类。

面对对象的三大特性

封装:保证对象自身数据的完整性和安全性

继承:建立类之间的关系上,实现代码复用,方便系统的扩展。

多态:相同的方法调用可实现不同的实现方式。

八.可扩展标记性语言XML

一、XML是什么?作用是什么?

l  XML ( eXtensible Markup Language )语言是一种可扩展的标记语言。其中的可扩展是相对HTML来说的。因为XML标签没有被预定义,需要用户自行定义标签。

l  XML 被设计的宗旨是:是表示数据,而非显示数据。

操作XML的方法

解析XMl文件

public static void Main(string[] args)

{  

    XmlDocument doc=new XmlDocument():

    doc.Load("Engineer.xml");

     XmlNode root=new XmlNode();

      foreach(XmlNode item in doc.ChildNodes)

      {

           switch(node.Name)

            {

                case "id":

                  Console.WriteLine(node.InnerText);

                   break;

            }

      }

}

 用TreeView显示数据

XmlDocument doc = new XmlDocument();
            doc.Load("北京电视台.xml");
            XmlNode root = doc.DocumentElement;
            //找根节点  
            foreach (XmlNode item in root.ChildNodes)//遍历子节点
            {
                if(item.Name.Equals("tvProgramTable"))//判断条件是节点的Name是否是"tvProgramTable"
                {
                    foreach (XmlNode items in item.ChildNodes)//遍历子节点的子节点
                    {
                        TvProgram Tp = new TvProgram();
                        Tp.PlayTime = Convert.ToDateTime(items["playTime"].InnerText);
                        Tp.Meridien = items["meridien"].InnerText;
                        Tp.Path = items["path"].InnerText;
                        Tp.ProgramName = items["programName"].InnerText;
                        ProgramList1.Add(Tp);//绑定到集合
                    }
                }

            }
TreeNode minenode = new TreeNode();
            minenode.Text = "我的电视台";

            //bind
            tvList.Nodes.Add(minenode);

            //根节点
            TreeNode root = new TreeNode();
            root.Text = "所有电视台";
            //bind
            tvList.Nodes.Add(root);

            ChannelManager manager = new ChannelManager();
            manager.ResolveChannels();
            List<ChannelBase> list = manager.List;
            foreach (ChannelBase item in list)
            {
                TreeNode tn = new TreeNode();
                tn.Text = item.ChannelName;
                tn.Tag = item;
                root.Nodes.Add(tn);

            }

  九.文件操作

如何读写文件

引入using.System.IO;

string path=txtFilePath.Text;

string content=txtContent.Text;

if(path.Equals(null)||path.Equals(""))

{

 MessageBox.Show("文件的路径不为空");

return;

}

try

{

FileStream nyfs=new FileStream(path,FileMode.Create)

streamWriter mysw=new StreamWriter(myfs);

mysw.Write(content);

mysw.Close();

myfs.Close();

MessageBox.Show("写入成功");

}

catch(Exception ex)

{

MessageBox.Show(ex.Message);

}

文件流

语法

FileStream 文件流对象=new FileStream(string filePath,FileMode fileMode);

文件读写器

StreamWriter 写入器

StreamWriter mysw=new StreamWriter();

解决乱码问题

FileStream myfs=new FileStream(path,FileMode.Open)

StreamReader mySr=new StreamReader(myfs,Encoding.Default);

content=mySr.ReadToEnd();

txtContent.Text=content;

文件和目录操作

File类和Directory类

File类常用的方法

Exites(string path) 用于检查指定文件是否存在

copy()复制文件

Move()移动文件

Delete()删除文件

示例 小型资源管理器

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Chap09_资源管理器
{
    class MyFile
    {
        public string FileName { get; set; }
        public long FileLength { get; set; }
        public string FileType { get; set; }
        public string FilePath { get; set; }
    }
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.Diagnostics;

namespace Chap09_资源管理器
{
    public partial class FrmMain : Form

    {
        public FrmMain()
        {
            InitializeComponent();
        }

        private void FrmMain_Load(object sender, EventArgs e)
        {
            DriveInfo[] di = DriveInfo.GetDrives();
            foreach (DriveInfo item in di)
            {
                TreeNode tn = new TreeNode(item.Name);
                tn.Tag = item.Name;
                tvList.Nodes.Add(tn);

            }


        }
        public void BindInfo(TreeNode node)
        {
            try
            {
                lvList.Items.Clear();
                DirectoryInfo dir = new DirectoryInfo(node.Tag.ToString());
                DirectoryInfo[] dirs = dir.GetDirectories();
                foreach (DirectoryInfo item in dirs)
                {
                    TreeNode tn = new TreeNode();
                    tn.Text = item.Name;
                    tn.Tag = item.FullName;
                    node.Nodes.Add(tn);
                }
                FileInfo[] fi = dir.GetFiles();
                List<MyFile> files = new List<MyFile>();
                foreach (FileInfo item in fi)
                {
                    MyFile mf = new MyFile();
                    mf.FileName = item.Name;
                    mf.FileLength = item.Length;
                    mf.FileType = item.Extension;
                    mf.FilePath = item.FullName;
                    files.Add(mf);
                }
                foreach (MyFile item in files)
                {
                    ListViewItem items = new ListViewItem(item.FileName);
                    items.SubItems.Add(item.FileLength.ToString());
                    items.SubItems.Add(item.FileType);
                    items.SubItems.Add(item.FilePath);
                    lvList.Items.Add(items);
                }

            }
            catch (Exception ex)
            {

                MessageBox.Show("" ex.Message);
            }

        }

        private void tvList_AfterSelect(object sender, TreeViewEventArgs e)
        {

            TreeNode node = this.tvList.SelectedNode;
            this.BindInfo(node);

        }

        private void lvList_DoubleClick(object sender, EventArgs e)
        {
            Process.Start(lvList.SelectedItems[0].SubItems[3].Text);
        }

        private void 复制ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            FolderBrowserDialog fbd = new FolderBrowserDialog();
            DialogResult result = fbd.ShowDialog();
            string sourcePath = lvList.SelectedItems[0].SubItems[3].Text;
            string desPath = null;
            if(result==DialogResult.OK)
            {
                desPath = fbd.SelectedPath;
                desPath  = "\"   lvList.SelectedItems[0].SubItems[0].Text;
                File.Copy(sourcePath,desPath);
                MessageBox.Show("复制成功");
            }

        }

        private void 删除ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            lvList.Items.Clear();
           string deletePath=lvList.SelectedItems[0].SubItems[3].Text;
            File.Delete(deletePath);
            MessageBox.Show("删除成功");
        }
    }
}

  金沙澳门官网 3金沙澳门官网 4

 

启动后就是这样可以读出自己硬盘上的东西!

好了就写到这了。总结到这里了。

前言: 学习C#编程应该有几个月了,作为一个菜鸟,没有资格来评论什么。只有对自己所学进行一个总结,...

八、 自定义泛型 40

第二章 深入C#数据类型 16

第六章 继承 51

04.整理S1四本书所有的课堂案例,上机练习,以及课后题目源代码(需要提交),并且形成电子文档。

七、泛型集合Dictionary<K,V> 40

4.封装体现   李明瑞 14

第九章 文件操作 89

8.经典练习  经理评分

 

 

思路分析:

 *先准备一个SE类

 * 准备一个对象数组,长度为3

 * 写一个方法初始化集合的3项

 * 如何将数组中的数据(肉眼看不到的数据)转换成界面上的ListView中的数据(肉眼能见到的数据)

 

 

作业:

1.帮我写一个SSMS工具

 

2016年8月25日作业

1.

 

 

2.Blog文章

剖内存

值类型引用类型

 Heap(堆) 栈(Stack)  队列

 12K

3.面试题:

int number=3;
Console.WriteLine(number.ToString());

结论:没有装箱

下去自己查!

 

四类八种类型

StringBuilder和StringBuffer

 

作业环节:

1.看本次课12个知识点

2.数组题

 

 

3.最后SE Voter手动敲一遍

4.计算机编号 ,经理评分

5.课后所有的选择和简答题

6.第三章的预习作业

 

第三章    使用集合组织相关数据

03.单例模式 75

10.vs2012下写的项目如何在vs2010中打开 16

7.值传递和引用传递

 

 

方法的参数是值类型和引用类型

 

 

 

 

 

注意:值传递和引用传递判定依据是有没有ref关键字

结论:

 

01.如果方法的参数类型本身就是引用类型,那么对参数值的修改会永久保存

例如:public void TP(SE se)

{

    se.Count ;//真正的修改se对象的Count值

}

02.如果方法的参数类型本身是值类型,又没有ref修饰,那么对参数值的修改,不会永久保存()

03.如果方法的参数类型本身是值类型,但是有ref修饰,那么对象参数值的修改,也会永久保存。

 

值类型传递 :不带ref的参数传递   SE se

 

引用类型传递:带ref的参数传递

 

Windows  Live  Writer

 

4.现场编程 35

07.解析xml文件 78

7.new:代表含义: 15

04.序列化与反序列化 94

8.字段和属性区别? 15

第二章 深入C#数据类型

1.讲解第一章 魔兽争霸项目

C#入门经典

C#图解教程

--->c#本质论

--->梅超风:

第四章 深入类的方法

第八章 网络电视精灵   // 获取和设置当前目录(该进程从中启动的目录)的完全限定目录。  System.Environment.CurrentDirectory

2016年3月5日13:50:57

1.最基础的xml解析的方式

  Html和xml全称

  01.html:Hyper Text  Markup Language(超文本标记语言)

     Xml:Extensible  MarkUp  Language(可扩展标记语言)

  02.html和xml从存储和展示的角度来说:

   Xml侧重Data存储

   Html:侧重Data 显示

  03.office 2007使用xml做数据存储

     百度新闻订阅使用的XML技术

     

 

 

 

     

2.关于网络电视精灵架构搭建

网络电视精灵

   技能点支撑:

     -->继承 ,简单工厂 XML文件  泛型集合  IO永久保存数据

 

 

   1.搭建项目架构

     需求分析:

    01.创建一个TvProgram类,和咱们files/XXX.xml文件对应

02.在什么地方解析所有频道的xml文件

 

 

//录制3个小时的视频。  1.5 个小时 网络电视精灵

                       三种方式实现多态:虚方法,抽象方法和接口

                       两个设计模式的blogs。

                      

 

  下次听写!

 

三、本章目标

1.理解继承的概念

2.熟练使用继承建立父类和子类

3.理解多态的概念

4.会重写虚方法实现多态

 

3放映场次

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

六、泛型集合List<T>(理解difficult,写起来easy) 40

二、第一个集合ArrayList的使用

 

无论是java还是C#,引用类型对象都会自动调用它的ToString()

ToString()方法体重写的刚好就是    命名空间.类名

 

public string ToString()

{

  return this.GetType().ToString();

}

1.NET简单解说 5

11.作业环节 16

                             By:北大青鸟五道口原玉明老师

一、课程回顾

1.使用new实例化对象时,调用了什么?

解析:调用了构造函数

2.方法重载有哪些特点?

解析:在同一个类中,方法名相同该,参数里列表不同,和返回值类型无关

3.以下位于同一类中的两个方法是否属于方法重载?为什么?

public string Method1(string name){}

public void Method1(string address){}

解析:不可以,这两个方法就是同一个方法,在同一个类中无法共存。

第六章 继承

 

 

7.new:代表含义:

Student stu=new Student();

01.创建对象

02.开辟空间

03.自动调用构造函数

2.常用方法:

添加:int Add(Object value) //添加一个对象到集合的末尾

遍历:通过foreach遍历

删除:Remove()、RemoveAt()和Clear()

      *:注意事项:如果删除了集合中的某一个元素,那么集合的索引会自动维护

      Remove():删除内容

      RemoveAt():通过索引删除

      Clear():一次性移除集合中所有的元素

      Contains():是否包含某个元素

1.学习方法:

 01.找一本好书

初始阶段不适合,可以放到第二个阶段,看到知识点时,要进行验证

 

 02.查看帮助文档和搜索引擎的使用

借助网络上的Blog文章

 

 03.不要急功近利

     不要抱着速成的想法,否则必然走弯路
     学习编程不是一蹴而就的事情
     付出的成本高,才能有一个高薪的收入

 

 04.不要浮躁

     不要什么都学,只学有用的

     浮躁的程度和技术水平成反比的
     走自己的路,让别人去浮躁去吧!

     每天问问自己,我是不是开始浮躁了,不能人云亦云.

 

05.学习语言基础很重要

   基础不扎实,开发出的程序就很危险
   将所学的用到开发中去

 

06.什么时候去看别人的代码?

    揣摩编写代码人的思路,远比自己写软件要难得多
    初学者不要去看别人的代码

    在纸上把调用关系画出来,抓主线.

 

07.如何提高?

    有主动性。学习的欲望要强。上网找别人的问题,为自己来提高

 

08.培养发现问题、思考问题和解决问题的能力

    出错信息,异常信息
    养成发现问题、思考问题和解决问题的能力

    这种能力受益一辈子,且不随时间变化

 

09编程的思想

 

  多用心,多动手
  程序运行的原理和机制
  编程的目的,函数的调用,内存模型

 

10.先学脉络,再学枝叶

 

你肉眼可见的网站 ,你都可以仿制出来,达到以假乱真的页面效果

13个段落  作家

 

 

第一章 深入.NET框架

--有的时候,我们在开发中,除了需要返回消息本身,还需要发送消息的状态,这个

--时候需要引入out参数。

 

03.在所有讲过的S1课程中,书写一篇有技术含量的blog,可以是对象数组,可以是KTV项目的功能点对知识点的运用把控。

一、课程回顾 51

8.经典练习  经理评分 26

3放映场次 100

03.FileInfo和 DirectoryInfo 93

Stack(栈):

 

Stack:System.Collections.Stack类表示对象的简单的后进先出非泛型集合。

栈图:

 

常用方法:

 

 

 

泛型方法

//方法定义

static void Swap<T>(ref T lhs, ref T rhs){    T temp;    temp = lhs;    lhs = rhs;    rhs = temp;}

//方法调用

public static void TestSwap(){    int a = 1;    int b = 2;     Swap<int>(ref a, ref b);    System.Console.WriteLine(a " "  b);}

 

作业:

1.下次课听写泛型和非泛型双列集合3中遍历方式

2.写出所有和集合相关的方法

3.上机练习和课后选择简答

4.第五章体检

5.泛型集合blogs

 

 

第四章 深入类的方法

 

船舶停靠在港湾是很安全的,但这不是造船的目的

2.方法重载(考试必考:2到3分) 45

第一章 深入.NET框架

2016年3月23日13:39:34

 

1.类和对象的关系?

解析:对象是类的实例,类是对象的抽象。

第一种:虚方法实现多态 63

5..那些年我们学过的访问修饰符??

public:任何位置,包括跨程序集。

internal:在当前程序集(项目)中都可以访问

private:只能在当前类中访问(当前类的花括号中访问。)

protected:只能在当前类和其子类中使用  (后续讲解)

 

访问修饰符:真正的含义?

类  字段  方法

类的访问修饰符:

//public(这个类在任何地方都可以使用)  internal

字段:private,public

方法:private ,public

1.构造函数

   构造:方法名和类名相同,没有返回值

   无参构造函数

   带参构造函数

构造的生成策略:

   注意:在C#中,当我们定义了一个类后,默认会生成一个与类名

   同名的无参构造,但是如果我们自定义了任何一个带参构造,那么  

   系统不再帮助我们生成无参构造,在真实的开发中,推荐大家定义

   两个构造函数,一个无参,一个带参。

1.从Movie开始

枚举和类在同一级别

 

影片属性----->电影名称   海报图片名   导演名  主演名  电影类型  电影定价

 

 

 

 

 

  1. 封装 16

  2. 关于数组的那些事儿 17

  3. 值类型(在栈上存储真实的值)和引用类型(堆和栈上都要分配空间) 17

  4. 结构体 22

1.封装

土豪:拆快递。

窗边的小豆豆

C#本质论:

.   封装又称信息隐藏,是指利用抽象数据类型(自定义类UserInfo)将数据和数据的操作结合在一起,使其构成一个不可分割的独立实体,尽可能的隐藏内部的细节,只保留一些对外接口,使之于外部发生联系。

 

 体现一:把方法和属性封装到类中,看成是一种封装

 体现二:将私有字段封装成 公有的属性

 

封装的优点

第一:code重用;

第二:不必关心具体的实现; (方法)

第三:面向对象三大特征之一;

第四,具有安全性!

小孩儿

老舍37《四世同堂》 妞子 活活的给饿死

黄磊

1.常见属性: 34

          --北大青鸟五道口校区原玉明老师编写

1.常见属性:

Capacity:集合占用空间

Count:集合存储元素个数

第二种:抽象方法实现多态 65

01.什么是设计模式 72

02.简单工厂图解

 

自己的一张图

 

再上一张图

 

 

 

第十章 影院售票系统 96

一、集合概念引入 30

★2.对HashTable遍历三种方案: 37

六、泛型集合List<T>(理解difficult,写起来easy)

 泛型:就是为了约束ArrayList中元素类型,而制定的一个新的集合类型,该类型只能加入同一类型的多个元素,标识符<T>,可以看成是一个占位符,泛型是将运行时错误提前到了编译时

员工打卡:下次周一:活动   项目

 

5..那些年我们学过的访问修饰符?? 14

9.自动属性 15

06.xml书写注意点 78

深入.NET平台和C#编程

 ★2.对HashTable遍历三种方案:

     ☆:第一种方式,遍历所有的keys,通过key的值获取value

     ☆:第二种方式:遍历所有的value集合

     ☆:第三种方式,同时遍历key和value

       Eg:

    fo

1.学习方法: 1

第一章 深入.NET框架 3

1.NET简单解说 3

2.Microsoft .NET框架概述。 5

  1. NET框架体系结构 7

4.封装体现   李明瑞 12

5..那些年我们学过的访问修饰符?? 12

6.变量,类和方法的命名法 13

7.new:代表含义: 13

8.字段和属性区别? 13

9.自动属性 13

10.vs2012下写的项目如何在vs2010中打开 14

11.作业环节 14

第二章 深入C#数据类型 14

CLR via C# 14

  1. 封装 14

  2. 关于数组的那些事儿 15

  3. 值类型(在栈上存储真实的值)和引用类型(堆和栈上都要分配空间) 15

  4. 结构体 20

5.构造函数 21

6.装箱和拆箱 22

  1. 值传递和引用传递 23

8.经典练习  经理评分 24

第三章 使用集合组织相关数据(终极内存数据容器) 26

一、集合概念引入 28

二、 第一个集合ArrayList的使用 29

★1.引子: 29

★2.集合扩容原理截图 30

三、集合中元素操作(添加,遍历,删除、常见错误) 32

1.常见属性: 32

2.常用方法: 32

  1. 常见错误:见PPT 32

4.现场编程 33

四、集合初始化器,对象初始化器 34

五、HashTable 34

★1.HashTable注意事项 35

★2.对HashTable遍历三种方案: 35

六、泛型集合List<T>(理解difficult,写起来easy) 38

七、泛型集合Dictionary<K,V> 38

八、 自定义泛型 38

九、.NET集合框架(集合扩展) 39

Queue(队列): 40

Stack(栈): 40

第四章 深入类的方法 42

1.构造函数 42

2.方法重载(考试必考:2到3分) 43

  1. 对象间的交互 43

第六章 继承 49

一、课程回顾 49

二、预习问题 50

三、本章目标 50

四、课程内容 51

3.继承: 51

第七章 深入理解多态 58

第一种:虚方法实现多态 61

第二种:抽象方法实现多态 63

第八章 网络电视精灵   // 获取和设置当前目录(该进程从中启动的目录)的完全限定目录。  System.Environment.CurrentDirectory 67

01.什么是设计模式 70

02.简单工厂图解 71

03.单例模式 73

04.为什么学习XML? 75

 05.什么是XML? 75

06.xml书写注意点 76

金沙澳门官网 ,07.解析xml文件 76

08.问题记录 76

09.TreeView控件 76

10.网络电视精灵 77

第九章 文件操作 87

01.文件操作相关 90

02.File和Directory 91

03.FileInfo和 DirectoryInfo 91

04.序列化与反序列化 92

第十章 影院售票系统 94

  1. 从Movie开始 95

  2. Seat 座位类 98

3放映场次 98

 

reach (DictionaryEntry item in table)

            {

                Console.WriteLine(item.Key "value==" item.Value);

           }

 

 

  第二种:抽象方法实现多态

通过在抽象类Birds中定义抽象方法Fly(),然后在子类【燕子】中对抽象方法Fly()进行重写实现多态,重写方式和虚方法一样,也是使用override关键字

Birds类:

 

燕子类:

 

喜鹊类:

 

在Main中调用:

 

2,抽象类可以被继承吗?

  可以,不仅可以被普通类继承,也可以被抽象类继承

3,抽象方法可以有方法体吗?

  不可以,连花括号都不能有

4,简述抽象方法和虚方法的区别?

 课本上

课堂笔记:

    //01.定义一个抽象类,用abstract 修饰

    //02.抽象方法不能有方法体,甚至连{}都不能有

    //03.抽象方法只能存在于抽象类中,但是抽象类中可以有非抽象方法

    //04.抽象类不能实例化

    //05.抽象类中抽象方法只是用来规定方法的形式(参数,返回值),约束子类方法的形式

    //06.抽象类中的抽象成员必须在子类中全部实现,除非子类也是抽象类

    //07.子类实现抽象方法的快捷键,Ctrl .(没有输入法情况下 )

    //shift alt F10

//08.抽象类不能用static修饰,也不能是密封类(sealed):如果是static,抽象就无法被继承,也就失去了抽象类本身的意义

下次课内容:01.提问9点默写

            02.封装,继承,多态自己扩展

 

深入理解多态

1.复习

  01.在子类中访问父类成员的关键字是什么?

  base

  注意点:base()只能用在子类构造中

  02.方法重载和方法重写的区别?

  override:在不同的类中,一个方法用override关键字修饰,那么就对父类当中的同名方法进行了重写

  重写的目的:就是为了实现多态,更进一步来说,就是为了统一调用

  方法重载:overload:在同一个类中,多个方法名称相同,参数列表不同就可以构成重载,和返回值类型

  有半毛钱关系

  03.is关键字作用?

  解析:判断类型是否兼容

2.预习检查

  01.定义抽象类的关键字是什么?

  解析:abstract

  02.as关键字的作用是什么?

  解析:as类型转换

  03.抽象类中只能有抽象方法吗?

  解析:可以。抽象方法只能出现在抽象类中。

 

3.本章目标

  01.理解里氏替换原则

  02.会使用父类类型作为参数

  03.理解抽象类和抽象方法

  04.理解虚方法和抽象方法的区别

4.里氏替换原则(7个原则)

概念:在一个软件系统中,子类可以替换父类出现的位置,而对软件的功能没有任何影响,就称为里氏替换原则。

5.is和as

is做类型判定,而as做类型转换,as进行类型转换和()强转效果是等价的。

6.用虚方法实现多态的步骤

子类重写父类的虚方法

两种方式

创建父类变量,实例化子类对象

把父类类型作为参数类型,该子类及子类对象作为参数传入

运行时,根据实际创建的对象决定执行哪个方法

7.什么是抽象类?

专业人士解析;如果在一个类前加上了abstract关键字,那么该类就称为抽象类

8.快速在子类中生成所有的抽象方法

方式一:在有输入法的情况下,使用Alt Shift F10

方式二;在无任何输入法的情况下,使用Ctrl .

    注意事项:01.必须无输入法状态

         02.不能点击小键盘的点

9.如果一个类用sealed关键字修饰,那么该类就是密封类

   特性:密封类不能被继承

10.如果以类用static修饰,那么该类就是静态类,在静态类中所有成员(成员变量和成员方法)都必须是静态的额

 public static class SqlHelper

    {

 

        public static string name;

        public static void Say()

        {

        }

    }

注意点:

01.在静态方法中不能直接访问非静态的方法或者变量

如果要在静态方法中,访问非静态成员,那么要通过对象名.方法名访问。

11.面向接口编程

 

 

 

 

我的无奈你永远不懂,因为我是抽象类

 

坦白的说,抽象类存在真的很不容易。在接口没有出生的时候,抽象类还可以大言不惭的说我是规范的制定者,但是背后传来一个声音,你只会比手画脚,发号施令,从来都不干实事(没有方法体啊)。

 

    于是抽象类就这样被埋没了。既然这样,抽象类接着毅然决然的寻找着自己的闪光点。但是一个个日出  换来了日落,今天的抽象类依然是抽象类。依然不可以昂头挺胸,气宇轩昂的向JVM索要空间~因为抽象类永远只能new别人,这或许就是《抽象类的伤心》吧!虽然经过种种伪装之后,抽象类可以有所谓的对象.

 

 

      例如,通过静态手段,通过子类等,但是,抽象类心里清楚,如果创建这样的对象,自己宁可不要。于是,抽象类再次倔强的谢绝了自己成为对象这个事实。然而,抽象类的伤心谁能知道,看到一个一个类都new出了自己的幸福,抽象类依然在默默的寻找着自己的亮点。虽然这是一条披满荆棘的漫漫长路,但是就像他喜欢的一句话:把握现在,珍惜当下,做真实的自己。真的希望,有一天,抽象类可以拿着麦克风大声说,其实我是一个有用的类。我不只是别人的嫁衣,别人的陪衬。

 

     难道在面向接口编程的今天,我抽象类真的就没有天日可见了吗,就因为我不能多继承吗?我不服。抽象类有自己的构造函数,但是却不能new,这种无奈谁又能懂?难道抽象类的存在只是为了子类吗?

 

 

     然而恰恰抽象类就处于这样一个尴尬的境地。

 

 

   向前一步,你就走出竞争的行列,永远在前。

   没有失败,只有暂时停止成功!-----

   不怕牛人牛X,就怕牛逼的人比你更努力!!!

 

 

 

向后一步,你永无出头之日,堕落,被这个社会最底层的人踩在脚下。不服和抱怨都无济于事 。

这就是现实。

 

Baby::::::

 

****************************************************************************

  1. 常见错误:见PPT 34

3.值类型(在栈上存储真实的值)和引用类型(堆和栈上都要分配空间)

值类型:

Short   int  long  

Float

Double

Boolean

Char

Byte

 

S2222 我们就是很2,牛!!!!你能怎么样!!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

C# 垃圾回收器回收器

 

Java 垃圾回收器回收器

 

二代

三代

四代

Student stu=new Student();

9.自动属性

自动属性应用场景:当我们不需要做逻辑判定的时候可以使用自动属性

定义自动属性在后台会自动帮我们生成一个对应数据类型的私有字段

 

2.Microsoft .NET框架概述。

 01,Microsoft .NET介绍

 微软的.NET历史

  2000年微软公司向全球宣布其革命性的软件和服务平台:Microsoft .NET

 

02,为什么需要.NET框架

 通过如下两个问题说明为什么需要.NET框架

001,C#程序可以在不同平台(PDA、PC)的环境中运行吗?

002,  使用C#程序可以调用VB.NET开发的程序吗?

答案肯定是可以的,这也足以说明.NET框架的强大之处。

03,.NET框架概述

.NET框架

.NET战略的基础框架

.NET程序的运行环境

强大的类库

.NET 框架==.NET Framework

 解析:在A机器上开发了一款软件,只要B机器上有框架就行了,不用再B机器上安装开发环境VS。

.net core 1.0

 

04,.NET框架的魅力

   001,面向对象编程

      提高软件可复用、可扩展、易维护性、灵活性

   002,强大的动态web支持

   003,web服务

   例如:天气预报服务iGoogle和支付宝网上购物商城

  003,数字身份验证的支持

  004,支持构建.NET程序的炫彩外衣(特效制作)

第十章 影院售票系统

类的架构图

技术先导 :动态生成标签 35个Label

需要将35Label放入TabControl中。如何Render(渲染)称为了最大的问题

1.在内存中准备一个Label  直接new即可  

2.内存中的Label如何绑定到Form1上。

3.

 

 

 

 

04.序列化与反序列化

 

对象:UserInfo类型:

      UserName :微冷的雨

      UserAge     18

      UserAddress  北京海淀

 

序列化是将   对象状态     转换为     可保持或可传输格式  的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据。

 

 

 

 序列化注意事项:

 01.如果自定义类需要被序列化,那么必须打上[Serializable]特性

 02.必须保证可序列化类的所有属性也均可以序列化

 03.必须保证可序列化类的父类也可以序列化

 04,如果只序列化部分属性,不需要序列化的属性上可以打上[NonSerializable]特性

 

 

 

6.变量,类和方法的命名法

骆驼命名法(camel):第一个单词的首字母小写,后续有含义的单词首字母大写。 变量

帕斯卡命名卡(pascal):每一个单词的首字母都大写。类名和方法名

01.预习S2 第二本数前4章,提交电子版预习笔记,附带案例做完,并且书写第五章体检套餐管理项目

二、 第一个集合ArrayList的使用 31

★1.引子:

用ArrayList进行赋值的时候,需要使用Add()

但是对集合中元素的修正可以使用下标,eg.list[0]=1给新值

但是在集合中元素个数为0的情况下,不能用Add()方法之外的其他手段给集合中添加元素

,原因因为_size是集合的一个属性, 真正存储元素个数为0的时候。_Size也是0.

int[] nums = { 1, 2, 3, 3, 4, 5 };

    我想在2和3之间插入一个元素100

    数组的局限性:由于给数组中添加元素,删除元素的时候,特别麻烦,所以我想找一个替代数组的工具,来帮我们实现数组所能实现的功能。集合应运而生

集合的优点:01.自动扩容 02.集合当中很多方法可以让我们更加便捷的来操作集合中数据。(必须掌握)

 

扩展:集合本质的讲解(面试可以聊,加分)

 00.使用ArrayList首先需要引入命名空间,System.Collections

 

 01集合动态扩容原理:如果集合中元素个数为0,并没有开辟空间

 

 02.默认如果集合中出现了第一个元素,那么集合的大小4,如果放入第5个元素,那么会扩容成8

 

 03.如果在小括号中首次定义的时候指定了集合的长度,那么以后扩容的方式

 变成初次指定数字大小的2倍;如果没有指定长度,那么遵循01的规范

 

 04.集合内部也是通过两个数组相互copy完成扩容的,但是微软已经对其做了优化,我们不用关心效率问题

 

 

 

3.继承: 53

2.关于数组的那些事儿

如果我们定义一个数组,并且赋值了

int[] nums={1,2};

nums当中保存 的是堆中的地址:例如:0x001

nums[0]:访问的是堆中的内容

01.文件操作相关 92

★1.引子: 31

 

10.网络电视精灵 79

九、.NET集合框架(集合扩展)

 

 

 

03.单例模式

S1  KTV

在某些特殊的场合中,我们需要在内存中只驻留某个类的一个对象,KTV点歌系统,播放窗体只需要有一个。

 

 

 

1.ASP.NET和JSP的关系

ASP.NET 和JSP都是用来开发动态网站的技术,只不过ASP.NET是通过c#语言来操作的,

而JSP是通过Java语言来操作的。

04.为什么学习XML?

  01.跨平台(操作系统),就是在windowns操作系统和Linux操作系统上均可以被解析

  02.跨开发语言

  03.超市管理系统      一家店   Access(文件型数据库)

    每天看一下每个门市销售业绩         SQL Server数据库      Oralce

先将Access中的数据表导出到Excel文件 

然后将Excel文件中的数据导入到Sql  Server数据库

  04.Java中实现企业级应用缺少了配置文件,那么灵活性就不复存在。

  05.RSS订阅本质上就是一个XML文件

 05.什么是XML?

解析:XML:Extensible Markup Language(可扩展标记语言)

        HTML:HyperLink Text  Markup Language(超文本标记语言)

  xml文件和html文件的区别?

  解析:01.xml严格区分大小写,html不区分

          02.xml不是编译语言,xml和html都是解释型语言

          03.html语言负责显示数据,而Xml文件就是专门用来存储数据

4.GB2312和GBK可以看成是等价的,都可以支持中文。

如果我们在书写xml文件的时候,如果自己用的encoding="utf-8"出现问题,

那么试着切成gb2312

06.xml书写注意点

  1.xml文件严格区分大小写
  2.标签配对出现
  3.xml文档只能有一个根节点
  4.我们自定义xml文档中的标签

07.解析xml文件

  解析:01.做一个xml文档

          02.copy到debug目录下

          03.创建一个XmlDocument对象 Ctrl .导入命名空间

         04.调用doc.Load(“路径”)

         05.拿到根节点  XmlNode root=doc.DocumentElement;

         06.用foreach来获取子节点内容

08.问题记录

 01.Load(string filename):绝对路径:"D:123Singer.xml"

 02.item.Name指定的是<内容>  ,item.InnerText指的是<>内容</>

09.TreeView控件

    01.如何获取选中的节点??

   解析:TreeNode tn=  tvList.SelectedNode;

  02.如何移除某一个选中的节点?

  解析:TreeNode tn=  tvList.SelectedNode;

       tn.Remove();

 03.Tag:属性,以后编程的时候,思路可以向Tag偏移。

Tag:Tag属性是微软提供给编程人员的一个编程接口,通过它可以轻松的实现某些功能。

04.Level深度

 

10.网络电视精灵

  业务需求:市场上有很多网络电视软件:PPS,PPTV,PPLive,风行,暴风

所以我们来开发一款自己的网络电视软件!

  所用技术:

   01.C/S架构,数据存储在XML文件中 

    02.简单工厂模式

    03.继承和多态

    04.解析XML文档技术

   05.深入剖析内存中数据的走向

  06.TreeView控件的使用

核心:通过该项目,大家应该对业务流程有一个整体把控。对继承和多态有深入的了解

 

这篇文章的目的主要为了后续工作的使用,在这里对S2深入.NET平台和C#编程中贯穿案例《网络电视精灵》的部分实现代码进行思路剖析。

  一、项目框架的搭建:

   我们都知道开发一个项目之前,应该对项目的整体框架进行搭建。或者专业一点称为详细设计。解析来我们就来看下网络电视精灵的大致结构,当然后续的功能可能还需要加入其它类。

 思路分析: 

1.创建对应的类

 

TvProgram:节目类

 

 

该类主要负责定义节目的属性,为后续从xml文件中读取的内容提供存放位置。

ChannelBase:频道基类

 

 

TypeAChannel:A类频道

TypeBChannel:B类频道

 

 

ChannelFactory:工厂类

 

 

 

 

上述四个类主要控制频道信息

 

ChannelManager:频道管理类

 

该类主要作用实质上减轻窗体中的代码量。相当于程序的工具类。

 

2013年8月18日

 

任务;加载所有的频道信息,绑定到界面的TreeView上

 

核心思路:

 

    1.首先在频道管理类ChannelManager中写一个加载所有频道方法LoadAllChannel;

 

       该方法作用读取FullChannels.xml文件,并且将读取到的内容赋值给ChannelBase          对象。关键的问题就转化成了如何创建一个ChannelBase对象。我们都知道ChannelBase本身是一个抽象类,无法创建实例。由此,我们想到可以通过其子类来创建对象。由于不同子类实例化需要多次new,我们单独写了一个工厂类(ChannelFafactory),来创建子类实例,但是该子类实例存储在父类变量中。赋值完成后,我们需要将频道对象添加到字典中。那么

 

LoadAllChannel方法结束后,字典中就有了XML文档中的数据。也就是我们实现了将

 

本地硬盘上的xml文件中的数据读取到了内存中的一个字典集合中。

 

 

2.将集合中的数据绑定到TreeView中

将字典集合中的数据通过Foreach拆解,每循环一项,都创建一个TreeNode对象。

并且将集合中的属性赋值给节点对应的属性。然后将拼接处的节点添加到TreeView上

。这里需要注意的是,如何找到TreeView控件中的【所有电视台】这个节点,因为

我们需要在该节点上添加频道名称。代码如下:

 

2013年8月21日

扩展:DGV绑定List<T>

List<T> list=new  List<T>();

dgv.DataSource=new BindingList<T>(list);

 

任务:1.将频道节目单填充到DataGridView中

      2.实现TreeView的右键菜单功能(能添加电台和删除电台)

      3.右键菜单控制

核心思路:

   将频道节目单填充到DataGridView中

     1.在对应的频道子类中书写Fetch方法,解析对应的频道xml文件,然后将xml文件中的数据读取到 public List<TvProgram>  TvList { get; set; }中。

    2.将TvList中的数据绑定到DataGridView上

 

实现TreeView的右键菜单功能(能添加电台和删除电台)

  核心思路:

     1.添加电台

 

 

其实我们在做的事情就是先获取所有电台的某一个电台(北京电视台),然后通过

Tag属性拿到该电台对应的属性,将拆解出来的属性赋值给我的电台下的某一个

节点,由于节点不存在,所以我们要构造出一个节点。然后赋值,赋值完成后,我们就将构造出来的 节点添加到我的电台下就OK。

 

当然,上面的操作仅仅是界面上新增电台的一个假象。程序再次运行时,我们添加的电台并没有保存。所以我们要将选中的电台添加到我的电台(由于我喜欢的电台可能有多个,所以我们定义了一个集合。)集合中。因为我们大家都知道集合中的数据时存储在内存中的,所以我们要向程序下次运行时,显示出我们添加的电台,那么就必须将集合中的数据永久保存。当然我们知道,永久保存数据的方法有很多,在这里我们采取的是使用txt文件的方式,所以我们书写了一个方法来帮我们完成这项工作,sw.WriteLine(“End”)主要为了方便后面对文本文件的读取

归结起来有3点:

  01.在TreeView中添加节点

  02.向集合中添加节点

  03.将集合中数据写入文本文件

删除电台思路与这个差不多!就不赘述了。

右键菜单控制

核心思路:通过Visible属性控制右键菜单的显示和隐藏

 

网络电视精灵后续思路

1.点击TreeView上某个电视台节点后,显示该频道下所有的节目单,

将节目单内容填充到DataGridView控件中。

思路分析:既然TypeAChannel:ChannelBase对应的北京电视台,那么我们需要找到保存

北京电视台中所有节目的xml文件,然后接续该xml文件,每一个<TvProgram>

节点都是一个节目单对象。我只需要将解析出的内容加载到集合中。集合中就存储了

一系列TvProgram对象,我只需要将该集合绑定到DataGridView上就OK了。

 

DgvList.DataSource=list;

 

注意:在调用Fetch方法之前要清空下集合中的数据

//第二节课:完成加载功能

 

2.可以将所有电视台下的某个频道添加到【我的电视台】下

思路分析:

  第一步:将【所有电台】下选中的频道加入到【我的电视台下】(假象:内存中操作,程序退出后,数据不保存)

  第二步:IO操作。将选中的节点添加到【我喜欢的电台】集合中,在ChannelManager类中通过

    SaveToTxt()方法将集合中的数据写入到本地的文本文件中 ,并规定文件每行的保存格式。

     TypeA|北京电视台|files/北京电视台.xml,,其中|只是为了到时候读取文本文件时可以将每一行内容

     由字符串转换成对应的属性值。

  

   第三步:01.将文本文件中内容重新赋值给集合。

             每读取一行,就是一个ChannelBase对象,然后将该ChannelBase对象

             添加到集合中。

           02.集合中有了数据后,再下一次用户打开应用程序的时候,就将集合中的每一项构造成一个TreeNode节点。

           然后将该节点作为【我的电视台】下的子节点存在。

           

 

//创建一个文件

using System.IO;

  FileStream fs=new FileStream("D:\123.txt",FileMode.Create);

  //买一只钢笔

  StreamWritter sw=new StreamWritter(fs);

  //真正写入内容

  sw.Write("我喜欢C#课程");

  //关闭写入器

  sw.Flush();

  sw.Close();

  

  

  fs.Close();

  

 //判断文件是否存在

 if(!File.Exists("E:\123.txt"))

 {

    //不存在的时候copy

    File.Copy("D:\123.txt","E:\123.txt");

 }

 

 //读取

 

 FileStream fs=new FileStream("E:\123.txt",FileMode.Open);

 StreamReader sr=new StreamReader(fs,Encoding.Default);

 string str=sr.ReadToEnd();

 Console.WriteLine(str);

 sr.Close();

 fs.Close();

 

 

 

 作业         1. 10章项目总结到  blog文章

              2.下次课程单词:4章 6,7,8,9 (你来判单词)          两个设计模式,今天xml解析方式,带属性的方案

              // 3.引出网络电视精灵架构搭建

 

第七章 深入理解多态 60

本文由金沙澳门官网发布于网络编程,转载请注明出处:在那个桃花盛开的季节,个人总结深入

关键词: 金沙澳门官网

上一篇:金沙澳门官网最新海南
下一篇:没有了