深入.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 //结束
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值