嘿嘿,今天周六啦,我们是自由学习啦,于是还记得前几天纠结的事情,还有好多不太熟悉的题目那,于是今天就找出来练习下拉,而且这些题目在老师给我们复习时间也给我们讲解过啦,这样一来应该做起来还是容易点的啦,不过却不是我想象中的那样啦,我下午坐在这里做这些题,然后分析下它的思路以及做法和一些方法间的区别,一下整啦六个小时,好出乎意料啦,下面就把我做的这些题整理在这里啦。
一.总结啦一下枚举和结构以及常量的关键字
//常量的关键字const
class Program
{
enum E : short //定义枚举类型里面的参数为short类型的
{
man,
woman
}
enum QQ : long //定义枚举类型里面的参数为long类型的
{
online,
hidden,
busy
}
static void Main(string[] args)
{
A a = new A();
a.x = ;
a.y = ; //结构体可以实例化,通过对象传参 QQ qq = QQ.online; //枚举的方法
E e = E.man; Console.WriteLine("{0},{1}",a.x,a.y);
Console.ReadKey();
}
struct A //结构体,定义一个点的坐标
{
public int x;
public int y;
}
}
其实在复习的课堂上面,老师说的枚举和结构的知识点还记得,但是,今天突然想起来他们之间的区别,就把他们写在啦一起,下次在复习时间可以更好地记得他们各自的用法。虽然结构使用的很少吧,但是还是总结一下啦,嘿嘿。
二.随机数的使用方法
class Program
{
/// <summary>
/// 输出20次1到10之间的随机数
/// </summary>
/// <param name="args"></param>
static void Main(string[] args)
{
Random r = new Random();
for (int i = ; i < ; i++)
{
Console.WriteLine(r.Next(, )); //随机数的产生使用的是Random中的Next方法
}
Console.ReadKey();
}
}
在这里,主要是这个方法在刚接触时间真的不能理解他的意思,就是记得它的用法啦,而现在这个已经看起来很熟悉啦,但是这个在使用的地方会多,就简单的写啦一下。
三.字符串的处理
class Program
{
static void Main(string[] args)
{
#region 接收用户输入的一句英文,将其中的单词以反序输出
//课上练习2:“I love you"→“i evol uoy"
//var v = arr.Split(' ');
//foreach (var item in v)
//{
// Console.WriteLine(item);
//}
#endregion #region 合并字符串或者数组Join
//string num = "I love you";
//string arr = " i hate you";
//Console.WriteLine(string.Join(",", num, arr));//可以使用一个连接符
//Console.WriteLine(string.Join("", num, arr));//join方法中可以为空 //string[] ar = { "I love you", "i hate you", "I love you" };
//string num1 = string.Join("*", ar); // 添加分隔符
//Console.WriteLine(num1);
#endregion #region 字符串的合并以及其他转换的方法
//string name = " Tom ";
//string name1 = "Grease";
//Console.WriteLine(string.Concat(name, name1, true));
//Console.WriteLine(name.ToUpper());
//Console.WriteLine(name.ToLower());
//Console.WriteLine(name.Trim());
//Console.WriteLine(name.TrimStart());
//Console.WriteLine(name.TrimEnd());
#endregion #region 字符串的比较
//string name = "Grease";
//string name1 = "Grease";
//if (string.Compare(name, name1, StringComparison.OrdinalIgnoreCase) > 0)
//{
// Console.WriteLine("name大于name1");
//}
//else if (string.Compare(name, name1, StringComparison.OrdinalIgnoreCase) == 0)
//{
// Console.WriteLine("字符串相等");
//}
//else
//{
// Console.WriteLine("name小于name1");
//} #endregion #region Equals
// string name = "Grease";
// string name1 = "Grease";
//// if (name.Equals(name1))
// if (string.Equals(name,name1))
// {
// Console.WriteLine("=");
// }
// else
// {
// Console.WriteLine("!=");
// }
#endregion #region ToCharArray
//string str = "我爱北京天安门,天安门上太阳升";
//char[] s = str.ToArray();
//Console.WriteLine(s[2]);
////char[] a = str.ToCharArray();
//var arr = str.ToCharArray();
//foreach (var item in arr)
//{
// Console.Write(item);
//}
#endregion //字符串为空或者为null.还有就是是否有空格,这三种情况的区别 #region IndexOf
//string word = "旋转音乐盒,下雨天,下雪天! 雪";
//Console.WriteLine(word.IndexOf("下雨天")); //IndexOf输出的是索引
//Console.WriteLine(word.LastIndexOf("音乐盒")); //LastIndexOf从后面开始数数,但是还是该字符正方向的索引
//找不到子字符串返回-1
#endregion #region 方法Substring和Split
//string word = "旋转音乐盒。下雨天,下雪天!雪"; //string a = word.Substring(1); //当方法Substring为一个参数时间则是从此索引街渠道左后
//Console.WriteLine(a); //string b = word.Substring(5, 8);//当为两个参数时间,则为索引,从第一个开始截取到第二个
//Console.WriteLine(b); //string[] c = word.Split(','); //Split方法使用,分割时间是一个字符
//foreach (var item in c)
//{
// Console.WriteLine(item);
//} //string[] d = word.Split(new char[]{',','!','。'}); //可以把多个字符当做分隔符,即用字符数组作为参数
//foreach (var item in d)
//{
// Console.WriteLine(item);
//} #endregion #region Equals与Compare区别
//string num = "Grease";
//string arr = "grease"; //在这里需要注意空格和标点符号都也可以区别是否一样
//Console.WriteLine(string.Equals(num, arr));
//Console.WriteLine(num.Equals(arr, StringComparison.OrdinalIgnoreCase));
////在这里StringComparison.OrdinalIgnoreCase是不区分大小写的方法,区分时间可以不用写这个方法,Equals的结果输入为bool类型真为true,假为false
//Console.WriteLine(string.Compare(num, arr)); //Compare的结果输出为1与0,真为0,假为1
//Console.WriteLine(string.Compare(num, arr, StringComparison.OrdinalIgnoreCase));
#endregion #region Replace
//string name = "ease";
//string name1 = "Grease";
//Console.WriteLine(name.Replace("e", "b").Replace("a", "w")); //Replace可以多项替换
//Console.WriteLine(name1.Replace("e", "b"));
#endregion
Console.ReadKey();
}
}
首先想说的是我再字符串类型转换就是char,string,ToString和ToCharArray之间的转换一直就是迷茫中,但是字符串可以使用的方法就是上面这些,虽然我们不能仅仅依赖于微软给我们提供的方法,但是在我们使用啦这些方法我们的程序真的变得简单好多啦的。
四.集合和装箱拆箱的区别
class Program
{
static void Main(string[] args)
{
//装箱与拆箱
object o= ; //装箱 就是引用类型转换位值类型
int i = (int)o; //拆箱 就是值类型转换为引用类型 #region ArrayList
//string[] strArray = { "下雨天", "旋转音乐盒", "晴天娃娃" };
//ArrayList array = new ArrayList(); //ArrayList是任意类型都可以添加进去
//array.AddRange(strArray); //添加一个数组要用AddRange方法,其他的可以使用Add方法 //array.Add(o); //添加一个object类型的变量
//array.Add("audoeahu"); //添加字符串
//array.Add('a'); //添加字符
//array.Add(4); //添加一个整形的数字 ////array.RemoveAt(1); //移除ArrayList中的其中一项,其中参数为索引值
////array.RemoveRange(2, 3); //移除ArrayList中的其中一项或者几项,其中参数为索引值,从哪个所引导哪个索引
////array.Clear(); //清空ArrayList中的每一项成员
//array.Reverse(); //可以倒叙输出ArrayList中的每一项成员
//#endregion
//foreach (var item in array)
//{
// Console.WriteLine(item);
//}
#endregion #region 泛型List #region int
//List<int> list = new List<int>() {2,5,6,4,5,8,8};
//foreach (var item in list)
//{
// Console.WriteLine(item);
//}
#endregion #region string
//List<string> li = new List<string> {"1","2","3","4","5"};
//string[] arr = li.ToArray();
//foreach (var item in arr)
//{
// Console.WriteLine(item);
//}
#endregion #endregion #region HashTable
Hashtable table = new Hashtable(); table.Add("", "");
table.Add("", "");
table.Add("", ""); foreach (var item in table) //?????????????????????????????
{
Console.WriteLine(item);
}
foreach (var item in table.Keys) //遍历输出Hashtable中的key键的值
{
Console.WriteLine(item);
}
foreach (var item in table.Values) //遍历输出Hashtable中的Values键的值
{ //Hashtable是键值对的形式存放数据以及输出数据的
Console.WriteLine(item);
}
#endregion #region Dictionary
//Dictionary<string, string> d = new Dictionary<string, string>();
//d.Add("旋转音乐盒", "阿悄");
//d.Add("下雨天", "南拳妈妈");
//foreach (var item in d)
//{
// Console.WriteLine(item);
//}
//foreach (var item in d.Keys)
//{
// Console.WriteLine(item);
//}
//foreach (var item in d.Values)
//{
// Console.WriteLine(item);
//}
#endregion Console.ReadKey();
}
}
嘿嘿,上面有一个问题不知道啦,就是在HashTable中不能直接遍历出每一项吗?而Dictionary是可以的,而且Dictionary也可以仅仅遍历出来key值或者Value的值。在集合中其实现在好多使用的是List泛型和Dictionary这两个,似乎是使用ArrayList的现在都使用啦List,使用HashTable的现在好多使用啦Dictionary,所以我们要在掌握List和Dictionary的基础上在学习ArrayList和HashTable啦。
五.对象初始化和对象初始化器的区别
class Product
{
public Product()
{ }
public Product(string name, double price, DateTime time, double code)
{
this.Productname = name;
this.Productprice = price;
this.Producttime = time;
this.Productcode = code;
}
public string productname; public string Productname
{
get { return productname; }
set { productname = value; }
}
private double productprice; public double Productprice
{
get { return productprice; }
set { productprice = value; }
}
private DateTime producttime; public DateTime Producttime
{
get { return producttime; }
set { producttime = value; }
}
private double productcode; public double Productcode
{
get { return productcode; }
set { productcode = value; }
}
internal void ShowProductInfomation()
{
Console.WriteLine("商品名称{0},商品价格{1},出产合格日期{2},商品条码{3}", this.Productname, this.Productprice, this.producttime, this.Productcode);
}
}
class footproduct:Product
{
public void SayFoodInfomation()
{
Console.WriteLine("{0},{1},{2},{3}", base.Productname, base.Productcode, base.Productprice, base.Producttime);
}
}
class Program
{
static void Main(string[] args)
{
#region 初始化对象
//Product p = new Product("旺旺大礼包", 11.22, DateTime.Now.AddMonths(-18), 11.2233); //初始化对象、即实例化
//p.ShowProductInfomation();
//Console.WriteLine(p.productname);
//Console.ReadKey();
#endregion #region 对象初始化器
Product p1 = new Product { Productname = "旺旺大礼包", Productprice = 11.22, Producttime = DateTime.Now.AddMonths(-), Productcode = 11.2233 };//对象初始化器;
Console.WriteLine(p1.Productname);
Console.WriteLine(p1.Productprice);
Console.WriteLine(p1.Producttime);
Console.WriteLine(p1.Productcode);
Console.ReadKey();
#endregion
}
}
在这里,对象的初始化与对象的初始化器容易混淆,于是在这里区别一下,帮助自己的记忆。
六.FileStream的用法
class Program
{
static void Main(string[] args)
{
#region FileStream读文件
//using (FileStream fs = File.Open(@"F:\resoult.txt", FileMode.OpenOrCreate, FileAccess.Read)) //打开文件,找到到文件的位置
//{
// byte[] bytes = new byte[200]; //定义文件每次读取的量
// int num = fs.Read(bytes, 0, bytes.Length); //读取字节块
// string resoult = Encoding.Default.GetString(bytes, 0, bytes.Length); //以ANSI编码的方式读取
// Console.WriteLine(resoult);
//}
#endregion #region FileStream读写文件
//int i = 0;
//using (FileStream file = File.Open(@"F:\\第二周考试.rar", FileMode.OpenOrCreate, FileAccess.Read))
//{
// Byte[] bytes = new byte[10];
// using (FileStream f = File.Open(@"E:\\第二周考试.rar", FileMode.OpenOrCreate, FileAccess.Write))
// {
// if(file.Read(bytes, 0, bytes.Length) > 0)
// {
// f.Write(bytes,0,bytes.Length);
// i++;
// Console.WriteLine(i);
// }
// }
//}
Console.ReadKey();
#endregion
}
}
这个其实就是读取文件的方法啦。嘿嘿
七.Ditectory的用法
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
string num = this.comboBox1.SelectedItem.ToString();
this.pictureBox1.Image = Image.FromFile(@"F:\/练习项目\/11月27日\/01radiocheckbox\/img" + num + ".jpg");
} private void Form1_Load(object sender, EventArgs e)
{
string[] image = Directory.GetFiles(@"F:\/练习项目\/11月27日\/01radiocheckbox\/img");
string[] file = new string[image.Length];
for (int i = ; i < image.Length; i++)
{
string path = Path.GetFileNameWithoutExtension(image[i]);
file[i] = path;
}
comboBox1.Items.AddRange(file);
}
在这里使用的Directory是在winform中使用的,再窗体上面拖拉两个控件分别为PictureBox和Button,然后实现其各自属性和事件即可。
八.StringBuild的用法
class Program
{
static void Main(string[] args)
{
StringBuilder builder = new StringBuilder(); //StringBuilder需要初始化,通过对象添加参数 #region StringBuilder的方法
//builder.Append("下雨天");
//builder.Append("旋转音乐盒"); // Append事件为添加 //builder.AppendLine("下雨天"); // Append事件为添加之后换行
//builder.AppendLine("旋转音乐盒");
//builder.AppendLine("晴天娃娃"); //builder.Insert(3," 演唱:南拳妈妈 ");
//builder.Insert(21, " 演唱:阿悄 "); //builder.Replace('演','主');
////builder.Replace(); //在这里replace的方法参数仅仅为char类型 //builder.Remove(0, 2); //Remove在这里为把索引值为0到索引值为2的这段文字清除
////builder.Clear(); //全部清空
#endregion //builder.AppendLine("<html>"); //StringBuilder的可以显示静态页的样式,而且不需要遍历输出,仅仅需要输出对象即可
//builder.AppendLine(" <head>");
//builder.AppendLine(" <title>网页</title>");
//builder.AppendLine(" </head>");
//builder.AppendLine(" <body>");
//builder.AppendLine(" <p>StringBuilder做的HTML代码");
//builder.AppendLine(" </p>");
//builder.AppendLine(" </body>");
//builder.AppendLine("</html>");
Console.WriteLine(builder);
Console.ReadKey();
}
}
StringBuilder其实用法应该和String比较一下那。但是我们在开始学习就一直使用String,而且我前面也详细的把定义以及那一个更好写过啦,所以就只说下StringBuilder的更多方法以及需要注意的啦。
九.StreamReader和StreamWriter的学习
class Program
{
static void Main(string[] args)
{
//StreamReader的用法,读取文件内容
using (StreamReader reader = new StreamReader(@"F:\\1.txt"))
{
while (reader.Read() > )
{
Console.WriteLine(reader.ReadLine());
}
} string num = "abcabcabcabcabcabcabcabc";
using (StreamWriter str = new StreamWriter("1.txt"))
{
str.WriteLine(num); //在这里StreamWriter的参数应该怎么整??????????????
}
Console.ReadKey();
}
}
StringReader和StringWriter在这里就是读取和写入文件,这里是和电脑上存放的文息息相关的啦。
十.Path的用法
class Program
{
static void Main(string[] args)
{
//string strPath = @"D:\\r\\1.txt";
//Console.WriteLine(Path.GetExtension(strPath)); //获取字符串文件扩展名
//Console.WriteLine(Path.GetFileName(strPath)); //获取字符串文件名字
//Console.WriteLine(Path.GetFileNameWithoutExtension(strPath)); //获取字符串文件不带扩展名的名字
//Console.WriteLine(Path.GetFullPath(strPath)); //获取字符串文件的全部路径
//Console.WriteLine(Path.GetPathRoot(strPath)); //获取字符串文件的根目录
//Console.WriteLine(Path.GetDirectoryName(strPath)); //获取字符串文件的目录信息,不包含自己的字符串文件名字 //Console.WriteLine(Path.ChangeExtension(strPath,"mp3")); //改变字符串路径的扩展名 //string str = @"F:\\"; //必须以两个\\开头
//string str1 = @"1.txt";
//Console.WriteLine(Path.Combine(str,str1)); //合并字符串路径
Console.ReadKey();
}
}
Path主要是针对字符串进行处理的,文件是虚拟的存在,这个要区分开的啦。
十一.文件File操作
class Program
{
static void Main(string[] args)
{
//文件的创建 读取 复制 移动 删除
//string path = @"E:\a.mp3";
//File.Create(path); //创建文件 //File.CreateText(@"E:\a.txt"); //创建文本文件 //////////////////string text = File.ReadAllText(@"E:\a.txt", Encoding.Default); //读取
//////////////////File.AppendAllText(@"F:练习项目", text, Encoding.Default); //参数怎么写?
//将指定的字符串添加到文件中,如果文件不存在,则可以自动创建 //File.Copy(@"E:\a.txt", @"F:\b.txt", true); //复制 //string a=@"E:\a.txt";
//string b = @"F:\a.txt";
//File.Move(a, b); //移动
//File.Delete(b); //删除 //Console.WriteLine(File.Exists(@"D:\111.avi")); //Exists方法是确定指定的文件是否存在,返回一个bool类型的值 ////////////////////byte[] bytes = File.ReadAllBytes(@"E:\a.txt"); //ReadAllBytes怎么用?
////////////////////string a=Encoding.Default.GetString(bytes);
////////////////////Console.WriteLine(a); //Console.WriteLine(File.GetCreationTime(@"F:\练习项目")); //获取文件的创建时间
//Console.WriteLine(File.GetLastAccessTimeUtc(@"F:\练习项目"));//获取上次访问文件文件的时间
Console.WriteLine("ok");
Console.ReadKey();
}
}
这个也是针对计算机英翻上存放的文件进行处理,而他的AppendAllText方法的参数在vs中有显示,不知道为什么没能写出来啦,回头拉问问再补充上来啦。
十二. 委托Delegate
delegate string Print(string name, string sex); //创建一个有返回值的委托
class Program
{
static void Main(string[] args)
{
Print p = new Print(SayHi); //委托的调用 第一种 参数为一个方法
p += SayHello; Print p1 = delegate(string name, string s) //第二种
{
return name + s;
}; Print p2 = (string name, string sex) => name + sex; //第三种 Print p3 = (name, address) => name + address; //第四种,同时这也是拉姆达表达式的形成过程 Console.WriteLine(p("笑笑", "男")); //为对象添加参数的值
Console.ReadKey();
}
static string SayHi(string name, string sex)
{
return name + sex;
}
static string SayHello(string name, string sex)
{
return name + sex;
}
}
在这里委托刚开始学习都有点晕啦,其实就是在Main函数传参时间委托实例化对象时间传进来一个方法作为参数。
十三.事件Event
delegate void Bark(); //定义一个委托
class Program
{
static void Main(string[] args)
{
Cat c = new Cat();
c.Name = "大脸猫"; Mouse m = new Mouse();
m.Name = "蓝皮鼠"; c.Running += m.MouBark;
/*在CatBark方法被实例化调用时间,事件Running被触发,
则调用MouBark,这样就是事件的实现过程*/
c.CatBark();
Console.ReadKey();
}
}
class Cat
{
string name;
public string Name
{
get { return name; }
set { name = value; }
}
public event Bark Running; //事件是建立在委托之上的,这里是建立一个事件
public void CatBark()
{
Console.WriteLine("Hi,{0}来啦",Name);
if (Running != null)
{
Running();
}
}
}
class Mouse
{
string name; public string Name
{
get { return name; }
set { name = value; }
}
public void MouBark()
{
Console.WriteLine("{0}快跑", Name);
}
}
当事件的发生一定会伴随着委托的实现,这个事件其实在winform中,我们对按钮等事件的单击事件就是事件中的一种啦,他需要调用委托。
今天的总结就到这里啦,虽然是有点多啦,但是向系统的把一下学过的知识系统化啦,这样也可以帮助我们更好的记忆啦,嘿嘿。