.Net学习 第2季02 C#面向对象继承1

.Net 视频学习第2季 C#面向对象

 

面向对象继承1

查找类的命名空间快捷键:alt+shift+F10

项目A中有类X,要在项目B中使用X的话,首先在项目B的引用当中添加项目A,然后在项目B的代码中添加using A;(假设项目A类X的命名空间就是A)或者在使用X时采用A.X的格式。

 

记录运行时间

Stopwatch sw = new Stopwatch();
sw.Start();
// 代码
sw.Stop();
Console.WriteLine(sw.Elapsed);

Start()和Stop()是类Stopwatch的方法,Elapsed是类Stopwatch的属性。

 

值类型的数据存储在栈中,引用类型的数据存储在堆中。

int a = 10;
string s = "123";

我自己的理解是a会映射成地址,指向栈中某位置,该位置存放的是数据10;而s同样映射成地址,指向栈中某位置,该位置存放的是另一个内存地址,此地址指向堆中某位置,该位置存放的是数据“123”。

 

int a = 10;
a = 20;
string s = "123";
s = "456";

string的不可变性:a是值类型,对a重新赋值后,在栈中的数据10会被新数据20所覆盖;s是引用类型,对s重新赋值后,在堆中的数据“123”没有被销毁,而是在堆中另外开辟了空间存放新数据“456”,并且将栈中原本指向“123”的地址更换为指向“456”的地址。因此被覆盖的都是栈中的数据。重复给string赋值,会在堆中产生大量没有被指向的数据。

 

string s1 = "123";
string s2 = "123";

对上边的代码,直观的感觉是在堆中有两块空间分别存了2个“123”,然后在栈中s1存的是指向堆中第一个“123”的地址,而s2存的是指向第二个“123”的地址。但事实是,在堆中只有一个“123”,而在栈中s1和s2存储了相同的地址内容。

 

可以将string看成是只读的char数组,所以可以用索引来访问,但不能修改(只读属性)。注意,这只是理解上的方便,实际上string不是char数组,只是string类里边提供了一个通过索引来访问元素的方法。

当然string类也的确提供了转换为char数组的方法:

string s = "123";
char[] chs = s.ToCharArray();

而将char数组转换为string可以用string类的构造方法之一:

string s = "123";
char[] chs = s.ToCharArray();
chs[0] = 0;
s = new string(chs);

这时候s="023",注意堆中依然存在数据“123”,只是栈中s存储的已经不是指向“123”的地址,而是指向“023”的地址。

 

StringBuilder sb = new StringBuilder();
string s = sb.ToString();

StringBuiler类有方法sb.Append(x);效率比重新开辟内存空间的string要高。

 

string类的一些属性和方法:

string s1 = "abc";
string s2 = "abc";

// 通过属性Length获取字符串长度
int sl = s1.Length;

// 字符串比较(C#操作符重载,支持字符串比较)
if (s1 == s2)
{
  Console.WriteLine("s1=s2");
}
else
{
  Console.WriteLine("s1!=s2");
}

// 字符串大小写转换
string s3 = s1.ToUpper();
string s4 = s1.ToLower();

// 同样是字符串比较,Equals()方法可以提供参数来控制比较方法,以下是比较s1和s2,同时忽略大小写
if (s1.Equals(s2, StringComparison.OrdinalIgnoreCase))
{
  Console.WriteLine("s1=s2");
}

string的分割,Split()方法(重载6):第一个参数是char数组,存放要remove并作为分割的字符,第二个参数StringSplitOptions,枚举类型,None会将每个分隔符用NULL代替,而RemoveEmptyEntries则直接将分隔符去掉,方法返回一个string数组。

string s = "1 2 + 345 , 6";
char[] chs = { , +, ,};
string[] sa = s.Split(chs,StringSplitOptions.RemoveEmptyEntries);

上述代码实现了将s中的空格,加号和逗号去掉,并且返回string数组,共4个元素,分别是“1”,“2”,“345”和“6”。

.Net学习 第2季02 C#面向对象继承1

上一篇:C#界面设计疑问


下一篇:PHP在Windows上执行CMD命令的一个坑