public class Example
{
public delegate string DoSth(string str);//定义委托
internal string Go()
{
//声明一个委托变量,并把已知方法作为其构造函数的参数
DoSth d = new DoSth(Print);
string str = "Hello,World";
//通过委托的静态方法Invoke触发委托
return d.Invoke(str);
}
string Print(string str)
{
return "委托";
}
}
String 对象是不可改变的。每次使用 System.String 类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间而StringBuilder 在不敢变引用地址的情况下进行修改并且效率较高,如果要修改字符串而不创建新的对象,则可以使用 System.Text.StringBuilder 类
字符串在多次相加的时候会造成不必要的占用空间,尤其是在循环的时候。
string.foamt()方法也是使用了StringBuilder 类。效率等同
避免不必要的调用 ToUpper 或 ToLower 方法
String是不变类,调用ToUpper或ToLower方法都会导致创建一个新的字符串。如果被频繁调用,将导致频繁创建字符串对象。这违背了前面讲到的“避免频繁创建对象”这一基本原则。
例如,bool.Parse方法本身已经是忽略大小写的,调用时不要调用ToLower方法。
另一个非常普遍的场景是字符串比较。高效的做法是使用 Compare 方法,这个方法可以做大小写忽略的比较,并且不会创建新字符串。
string.Compare( str A,str B, bool true)
A:要比较的参数1
B:要比较的参数2
true:设置为true 表示忽略大小写
返回结果: 一个 32 位带符号整数,指示两个比较数之间的词法关系。 值 Condition 小于零 strA 小于 strB。 零 strA 等于 strB。 大于零 strA 大于 strB。
static void Main(string[] args)
{
Example e = new Example();
string kkss = e.Go();//调用委托事件
Console.WriteLine(kkss);
#region 测试效率
string kk = "sssssss";
kk = kk + "kkkkkkkkk";
string dtime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.FFFF");
Console.WriteLine(dtime);
if (kk == "ssssssskkkkkkkkk")
{
string time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.FFFF");
Console.WriteLine(time);
}
StringBuilder sb = new StringBuilder();
sb.Append("sssssss");
sb.Append("kkkkkkkkk");
string str = sb.ToString();
string dtimes = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.FFFF");
Console.WriteLine(dtimes);
int pp = string.Compare("ssKKs", "SsKKs", true);//忽略大小写比较效率高
if (0 == string.Compare(sb.ToString(), "ssssssskkkkkkkKK", true))
{
string times = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.FFFF");
Console.WriteLine("第二次:" + times);
}
Console.ReadLine();
#endregion
}
执行结果: