30天C#基础巩固------this,base,string中的方法,StringBuilder性能

简介: 30天C#基础巩固------this,base,string中的方法,StringBuilder性能

这里主要是记录下自己学习笔记,希望有个地方在以后可以看到自己走过的路。

 

关于之前多态的知识有一个口诀,很好理解里面的override和new,virtual关键字。


“new则隐藏,over重写,隐藏看类型,重写只管新”


面向对象的三大特征:封装,继承,多态。


非面向对象的特征---静态

679140-20160522230936513-455514983.png

静态一般的是使用的是方法,很少有字段。


下面是修饰符的图片,关于修饰符这个要在项目中使用,慢慢的理解。


679140-20160522230937326-1859588192.png


一: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:构造方法


679140-20160522230938701-1140069343.png

上面是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();


679140-20160522230941888-698044469.png

删除

-->


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);


679140-20160522230943076-1115549824.png


-->

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里面的参数就可以把多余的空格去掉。



679140-20160522230946794-604168326.png


现在就把里面的空格去掉了,a里面存取了4个string类型。


-->两个字符串的比较


679140-20160522230948279-1153155335.png


三: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();


679140-20160522230948904-703417304.png


这里要是把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();



679140-20160522230950169-271290447.png



这里我换成了100000性能还是这么的6.




目录
相关文章
|
10天前
|
缓存 API C#
C# 一分钟浅谈:GraphQL 优化与性能提升
本文介绍了 GraphQL API 的常见性能问题及优化方法,包括解决 N+1 查询问题、避免过度取数据、合理使用缓存及优化解析器性能,提供了 C# 实现示例。
57 33
|
11天前
|
算法 Java 测试技术
Benchmark.NET:让 C# 测试程序性能变得既酷又简单
Benchmark.NET是一款专为 .NET 平台设计的性能基准测试框架,它可以帮助你测量代码的执行时间、内存使用情况等性能指标。它就像是你代码的 "健身教练",帮助你找到瓶颈,优化性能,让你的应用跑得更快、更稳!希望这个小教程能让你在追求高性能的路上越走越远,享受编程带来的无限乐趣!
57 13
|
25天前
|
安全
String、StringBuffer、StringBuilder的区别
String 由 char[] 数组构成,使用了 final 修饰,对 String 进行改变时每次都会新生成一个 String 对象,然后把指针指向新的引用对象。 StringBuffer可变并且线程安全;有一定缓冲区容量,字符串大小没超过容量,不会重新分配新的容量,适合多线程操作字符串; StringBuiler可变并且线程不安全。速度比StringBuffer更快,适合单线程操作字符串。 操作少量字符数据用 String;单线程操作大量数据用 StringBuilder;多线程操作大量数据用 StringBuffer
|
2月前
|
Java
【编程基础知识】(讲解+示例实战)方法参数的传递机制(值传递及地址传递)以及String类的对象的不可变性
本文深入探讨了Java中方法参数的传递机制,包括值传递和引用传递的区别,以及String类对象的不可变性。通过详细讲解和示例代码,帮助读者理解参数传递的内部原理,并掌握在实际编程中正确处理参数传递的方法。关键词:Java, 方法参数传递, 值传递, 引用传递, String不可变性。
65 1
【编程基础知识】(讲解+示例实战)方法参数的传递机制(值传递及地址传递)以及String类的对象的不可变性
|
3月前
|
安全 Java
String、StringBuffer、StringBuilder的区别
这篇文章讨论了Java中String、StringBuffer和StringBuilder的区别。String是不可变的,每次操作都会产生新的对象,效率低且浪费内存。StringBuilder可以在原字符串基础上进行操作,不开辟额外内存,弥补了String的缺陷。StringBuffer和StringBuilder类似,但StringBuffer的方法是线程安全的。文章还列举了StringBuffer的常用方法,并提供了使用示例代码。最后总结了这三者的主要区别。
String、StringBuffer、StringBuilder的区别
|
2月前
|
canal 安全 索引
(StringBuffer和StringBuilder)以及回文串,字符串经典习题
(StringBuffer和StringBuilder)以及回文串,字符串经典习题
38 5
|
1月前
|
JavaScript 前端开发 开发者
|
2月前
|
存储 安全 Java
String、StringBuffer 和 StringBuilder 的区别
【10月更文挑战第21天】String、StringBuffer 和 StringBuilder 都有各自的特点和适用场景。了解它们之间的区别,可以帮助我们在编程中更合理地选择和使用这些类,从而提高程序的性能和质量。还可以结合具体的代码示例和实际应用场景,进一步深入分析它们的性能差异和使用技巧,使对它们的理解更加全面和深入。
39 0
|
3月前
|
JavaScript 前端开发 API
javaScript中常用的String方法以及注意点总结
本文总结了JavaScript中常用的String对象的方法及其注意事项,包括大小写转换、字符获取、子字符串截取、字符串拼接、去除空格、替换、分割以及查找字符串中字符的索引等操作。提供了每种方法的使用示例代码,帮助理解它们的具体用法和差异。
44 2
|
3月前
|
安全 Java
Java StringBuffer 和 StringBuilder 类详解
在 Java 中,`StringBuffer` 和 `StringBuilder` 用于操作可变字符串,支持拼接、插入、删除等功能。两者的主要区别在于线程安全性和性能:`StringBuffer` 线程安全但较慢,适用于多线程环境;`StringBuilder` 非线程安全但更快,适合单线程环境。选择合适的类取决于具体的应用场景和性能需求。通常,在不需要线程安全的情况下,推荐使用 `StringBuilder` 以获得更好的性能。
54 8