这里主要是记录下自己学习笔记,希望有个地方在以后可以看到自己走过的路。
关于之前多态的知识有一个口诀,很好理解里面的override和new,virtual关键字。
“new则隐藏,over重写,隐藏看类型,重写只管新”
面向对象的三大特征:封装,继承,多态。
非面向对象的特征---静态
静态一般的是使用的是方法,很少有字段。
下面是修饰符的图片,关于修饰符这个要在项目中使用,慢慢的理解。
一:this和base的区别。
这两个都是在我们进行开发经常使用的,关于this代表类的本身,我们可以利用它来对类进行设置,取值。而base代表父类,可以为其赋值。
public class Person { private string name; private int age; private char sex; public Person(string name,int age,char sex) { this.name = name; this.age = age; this.sex = sex; } //一个参数的CTOR,这里的this代表的是第三个构造函数 public Person(string name):this(name,"男女"[new Random().Next(2)]) { } //第三个,这里的this代表的是第一个CTOR public Person(string name,char sex):this(name,0,sex) { } }
base我们一般在使用父类里面的东西时使用。
二:关于C#中的string
1:构造方法
上面是vs中string类型中的构造函数,这里面都有中文的注释,可以理解。
2:常用属性
索引(Chars) 比如说str[3]:表示的是字符串中第三个字符。其实string里面和就相当于一个数组一样,有下标,我们可以使用索引来处理。
Length;表示字符串的长度。<下标从0开始>
3:常用方法
增加:
-->
public string Insert(int startIndex, string value); // 返回指定字符串在这种情况下插入在指定索引位置的新字符串。
public string Replace(string oldValue, string newValue); //返回一个新字符串,其中当前实例中出现的所有指定字符串都替换为另一个指定的字符串。
-->
Concat()用来连接两个数据(数字,string,int,char等)
public static string Join(string separator, params object[] values);//串联字符串数组的所有元素,其中在每个元素之间使用指定的分隔符。 separator:要用作分隔符的字符串。
string[] str = { "111", "222", "333" }; string strss = string.Join("",str); //注意这里的string.Join("",str);把数组中的""去掉分离,合并为一个string类型 Console.WriteLine(strss); Console.ReadKey();
删除
-->
public string Remove(int startIndex, int count); // 返回指定数量字符在当前这个实例起始点在已删除的指定的位置的新字符串。
string str = "012345"; str=str.Remove(1,2); //删除,从下标1开始数2个删除,余下0345 Console.WriteLine(str); Console.ReadKey();
-->
string str = "012345"; str = str.Substring(1, 3); //截取字符串从下标为1开始数3个数。 Console.WriteLine(str); Console.ReadKey();
-->
public string Trim();从当前 System.String 对象移除所有前导空白字符和尾部空白字符。
string str = " 012 34 5 "; Console.WriteLine(str); str = str.Trim(); Console.WriteLine(str);
-->
public string PadLeft(int totalWidth, char paddingChar);
string str = "12434"; str = str.PadLeft(10, '0'); //返回一个新字符串,该字符串通过在此实例中的字符左侧填充指定的 Unicode 字符来达到指定的总长度,从而使这些字符右对齐。 Console.WriteLine(str); str = "12434"; str = str.PadRight(10, '9'); //和上面的一样,只是从右边来填充9 Console.WriteLine(str);
改:
-->
首先ToCharArray(),在Join或Concat或构造函数
查看:
-->
public bool Contains(string value);//返回一个值,该值指示指定的 System.String 对象是否出现在此字符串中。
eg:
string str = "21434"; bool s=str.Contains("7"); //看str中是否有7 Console.WriteLine(s);
-->
public int IndexOfAny(char[] anyOf);//报告指定 Unicode 字符数组中的任意字符在此实例中第一个匹配项的从零开始的索引。
其它:
-->
bool a=string.IsNullOrEmpty(str); //字符串判空
-->
public string[] Split(params char[] separator);// 返回的字符串数组包含此实例中的子字符串(由指定 Unicode 字符数组的元素分隔)。
eg:
<a href="http://images2015.cnblogs.com/blog/679140/201605/679140-20160522230944451-173435674.png" rel="noopener"><img style="background-image: none; padding-top: 0; padding-left: 0; display: inline; padding-right: 0; border: 0" title="image" src="https://images2015.cnblogs.com/blog/679140/201605/679140-20160522230945248-1674191967.png" alt="image" width="518" height="137" border="0"></a>
我们可以使用Split里面的参数就可以把多余的空格去掉。
现在就把里面的空格去掉了,a里面存取了4个string类型。
-->两个字符串的比较
三:StringBuilder
-->字符串不可变,长期拼接字符串性能较低
eg:
通过Stopwatch类来计时;
Stopwatch sw = new Stopwatch(); //提供一组方法和属性,可用于准确地测量运行时间。 sw.Start(); string s=""; for (int i = 0; i < 10000; i++) { s+= i.ToString(); } sw.Stop(); Console.WriteLine(sw.Elapsed); //显示总共使用了多长的时间 Console.ReadKey();
这里要是把10000变为1000000性能就特别底下,时间会特别大。
现在我们换成StringBulider来看看。
Stopwatch sw = new Stopwatch(); //提供一组方法和属性,可用于准确地测量运行时间。 sw.Start(); StringBuilder sb=new StringBuilder(); //设置一个StringBuilder来保存字符串,性能特别好。 for (int i = 0; i <100000; i++) { sb.Append(i.ToString()); } sw.Stop(); Console.WriteLine(sw.Elapsed); //显示总共使用了多长的时间 Console.ReadKey();
这里我换成了100000性能还是这么的6.