欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C#学习笔记(四)

程序员文章站 2022-07-08 10:27:42
...

1、命名空间

    主要用来解决类重名问题。

    如何在一个项目中引用另一个项目中的类

1)、在VS解决方案栏中项目下的引用右键添加引用;

2)、在要引用其他类的CS文件中使用using引用其命名空间;

2、值类型和引用类型

区别:

1)、值类型和引用类型在内存上存储的地方不一样;

2)、在传递值类型和传递引用类型的时候,传递的方式不一样,值类型的传递称为值传递,引用类型的传递称为引用传递。

值类型:int、double、bool、char、decimal、struct、enum。

引用类型:string、数组、自定义类。

值类型存储在内存的栈中。

引用类型存储在内存的堆中。

3、字符串的不可变性

1)、当给一个字符串重新赋值之后,老值并没有销毁,而是重新再内存中开辟一块空间用来存储新的值。因此每次对字符串进行操作都会产生一块垃圾内存,为了解决这个问题就可以利用StringBuilder,当对字符串进行重复操作时,StringBuilder不会开辟新的内存,而只是操作同一块内存。

StringBuilder sb=new StringBuilder();
string str=null;
for(int i=0;i<1000000;i++)
{
   //str+=i;   //直接对str进行操作效率很低
   sb.Append(i);//利用StringBuilder会快很多
}
//最终还是要把StringBuilder转换成string
str=sb.ToString();

2)、可以将string看做char类型的只读数组,因此可以通过下标访问字符串中的某一个元素。

string s="abcdefg";
//s[0]就表示的a,只能读取,不能对s[0]=b进行赋值
//ToCharArray将string转换成char[]
char[] chs=s.ToCharArray();
chs[0]=b;
//再将字符数组转换成string
s=new string(chs);

3)、字符串的方法

  • Length:属性,得到字符串的长度
  • ToUpper():将字符串转换为大写
  • ToLower();将字符串转换为小写
  • Equals();比较两个字符串,通过参数可以选择不区分大小写
  • split():分割字符串
string s="a b c  - - , , . . * e + g =f";
char[] chs={' ','-',',','.','*','+','='};
string[] str=s.split(chs,StringSplitOptions.RemoveEmptyEntries);
把字符串中chs[]中的字符全部去掉
  • Replace():字符转换
string s="你是中国人";
if(s.Contains("中国"))
{
   s=s.Replace("中国","**");
}
把字符串中的中国用**替换
  • SubString():截取字符串
string s="abcdefg";
string s1=s.SubString(1);
string s2=s.SubString(1,2);
  • Startwith():判断字符串是以什么开头,返回的是布尔值
string s="abcdefg";
bool b=s.Startwith("ab");
//此时的b是TRUE
  • Endwith():同上相反的意思
  • Indexof():返回int,字符串中字符出现的位置
  • LastIndexof();字符串中字符最后出现的位置
  • Trim();移除字符串前后的空字符
  • TrimEnd()和TrimStart():只移除前面或后面的空字符
  • IsNullOrEmpty():判断字符串是否为Null或为空
  • Join();用特定符号分割数组或元素
string[] names={"张三","李四","王五","赵六"};
string str=string.Join("|",names);
//或者
string str=string.Join("|","张三","李四","王五","赵六");
和上面一样的效果,因为Join的第二个参数是params可变参数

4、C#中计算程序运行时间

StopWatch sw=new StopWatch();
sw.Start();//开始计时
.....
sw.Stop();//停止计时
console.writeline(sw.Elapsed);//输出总时间

5、类的继承

类的继承两个特性

1)、单根性:C#只支持单继承,不支持多继承,一次只能继承一个类

2)、传递性:父类的父类的成员会一直传递到子类,并且会沿着继承的路线一直传递下去。

任何类都可以从另一个类那里继承,自定义的类没有写继承,默认的都是继承自Object类,Object类是所有类的基类。

    继承的时候,父类的public以及protected成员可以被子类访问,但是父类的private成员不能被子类访问。

    父类的成员可以是虚拟的,成员由派生类重写,父类本身也可以是抽象类,抽象类不能直接实例化,而必须由派生类来实例化。

注:子类没有继承父类的构造函数,但是子类会默认调用父类的无参构造函数用来创建父类的对此昂,所以如果在父类中重新写了一个有参数的构造函数,这个时候无参构造函数就会去覆盖,解决办法:

1)、在父类中重新写一个无参数的构造函数;

2)、在子类中显示地调用父类的构造函数,用关键字——:base(父类有参构造函数的参数)

6、关键字的new隐藏父类成员

    如果在子类中有和父类命名一样的方法,则子类会覆盖父类的方法,有时候我们需要显示地表示要把父类的某个方法隐藏,这个时候可以使用关键字new,直接在父类方法的返回值前面加上关键字new即可。