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

 网络编程     |      2019-11-26 23:02

  前言:学习C#编制程序应该有多少个月了,作为叁个生手,未有资格来评价如何。只有对自身所学举办二个计算,恐怕有不严谨的地点,万望谅解。

         一·深入.NET框架

      .NET框架(.NET Framework卡塔 尔(英语:State of Qatar),他是开辟.NET应用程序的为主功底。

.NET框架的系统布局

  支持C#、VB、.NET、c++、等语言的付出,也正是我们所说的跨语言开垦。

.NET框架具备多个关键组件:CL福睿斯和FCL。(CL途乐是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;//拆箱

个人总结深入.NET平台和C#编程。值传递和援引传递

援引类型作为参数时:
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.卡塔 尔(英语:State of Qatar)未有重回值

(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 再次回到类型 方法名(卡塔 尔(英语:State of Qatar)

 {

    //方法体

 }

重写虚方法

做客修饰符 override 再次回到值类型 方法名()

{

//方法体

}

如何是多态

多态按字面包车型大巴乐趣正是“八种形态”,指同生龙活虎操作功用不风流倜傥的对象时,能够有两样的解说,发生差别的结果。

贯彻多态

(1.卡塔 尔(英语:State of Qatar)实现格局重写

(2.卡塔尔定义父类变量

七.尖锐明白多态

里氏替换原则

在叁个软件系统中,子类能够替换父类现身的地点,而对软件的效果没有别的影响,就叫做里氏替换原则。

子类能够扩大父类的机能,但不可能改造父类原有的效能。 子类能够兑现父类的肤浅方法,但不可能隐瞒父类的非抽象方法。 子类中能够扩大自个儿特有的主意。

当子类的艺术重载父类的艺术时,方法的松开条件(即方法的形参卡塔 尔(英语:State of Qatar)要比父类方法的输入参数更加宽松。

当子类的办法完毕父类的悬空方法时,方法的前置条件(即方法的重临值卡塔 尔(阿拉伯语:قطر‎要比父类更严俊。

看上去特别不敢相信 无法相信,因为大家会发觉在本身编制程序中时常会违反里氏替换原则,程序仍然跑的雅观的。所以我们都会生出这样的疑团,倘诺小编非要不依据里氏替换原则会有啥样结果?

下文正是:你写的代码出标题标概率将会大大扩充。

例如: Father son=new Son();

C#中有七个至关心珍视要字能够提现里氏替换原则:is和as操作符 is操作符用于检核对象和点名的类型是还是不是合作。 as操作符首要用来多少个目的期间的类型转变。

父类类型做参数

演示: 先给多少个类: 1.父类,交通工具类。有一群属性。 2.小车类,继承父类。 3.地铁类,世襲父类。 4.职员和工人类。工作者乘坐六通四达工具回家!工作者回家的点子,参数是父类对象!

然后建三个工作者的成团,初叶化工作者. 扔到会集里。就和=能够用集结的项点出工作者回家的方式传一个子类! 总计那正是子类指向父类!也便是所谓的里氏替换原则!

抽象类和虚幻方法

借使一个类不与具体的事物相挂钩,而只是表述豆蔻年华种浮泛的概念,仅仅是当作其派生类的三个基类,那样的类正是抽象类,在抽象类中宣称方法时,固然加上abstract时便是架空方法

抽象类与非抽象类的要紧差异:

·抽象类不能够间接被实例化

·抽象类中得以包括抽象成员,但非抽象类中无法

·抽象类无法是密闭的要么静态的

抽象方法是一个并未实现的章程,通过在定义方法时扩充最首要字abstract可以评释抽象方法。

泛泛方德文法

访谈修饰符 abstract 重返值类型 方法名(卡塔尔;

小心:抽象方法未有关闭的大括号,而是平素跟了个“;”也正是说,它从不包蕴方法实施逻辑的方法体!

抽象类的概念

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

专心: 抽象类提供的画饼充饥方法,这一个方法唯有定义,怎样促金奈由抽象类的非抽象子类达成。

抽象类和虚幻方法的采纳

哪些贯彻叁个虚无父类派生的子类 当从叁个架空父类派生叁个架空子类时,子类将袭承父类的保有特征,富含它未兑现的虚幻方法。抽象方法务必在子类中落到实处,除非他的子类也是抽象类。

抽象类和虚幻方法的选取

怎么样落到实处二个硕大而无当父类派生的子类 当从一个华而不实父类派生三个空洞子类时,子类将继续父类的具有特征,包涵它未兑现的悬空方法。抽象方法必得在子类中落到实处,除非她的子类也是抽象类。

面前碰到对象的三大特点

装进:保障对象自己数据的完整性和安全性

一而再:建构类之间的关联上,实今世码复用,方便系统的扩张。

多态:相似的形式调用可达成不一样的贯彻方式。

八.可扩充标志性语言XML

黄金时代、XML是什么样?成效是什么样?

l  XML ( eXtensible 马克up 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()删除文件

示例 Mini财富微电脑

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

 

起始后就是那样能够读出本身硬盘上的东西!

好了就写到那了。总计到这里了。

 

上一篇:那些年【深入.NET平台和C#编程】 下一篇:没有了