类型后面+?就可以声明可空类型了,可空类型和普通的类型是两种类型,赋值时需要进行类型转换
例如
double? num=null;
打包,便于管理
拿来主义,优势:解决代码冗余,特征:单根性(c#和java类语言的特征),继承性,javascript可以多继承,定义:将一个类库作为原始模版,在其上扩展另外的类库
构造方法的执行顺序:子类默认调用父类的构造方法
new对象的时候分2部分
1.New,创建对象,在内存开辟空间
2.调用构造方法,初始化数据,(先调用父类的构造方法,再调用自己的构造方法)
子类中的base()代表其父类的默认的无参的构造方法
如果父类没有无参的构造方法,只有有参数的构造方法,子类调用时
class Student:Person
public Student (string name):base(name)
{
}
子类可以赋值给父类对象
父类对象可以强制转化为对应的子类对象
class MyBase{}
class MyClass1:MyBase{}
class MyClass2:MyBase{}
//里式第一条
MyBase m1=new MyClass1();
//里式第二条
MyClass1 m2=(MyClass1)m1;
//is,返回是bool类型
m1 is MyClass1;
//as ,转换成功则赋值,转换失败则为null
MyClass1 m4=m1 as MyClass1;
对象在调用同一个方法的时候表现出来的多种状态
父类统一调用,子类具体实现(重写基类方法具体实现)
隐藏基类方法实现多态
口诀:New则隐藏,over重写;隐藏看类型,重写只管新
开启新的进程打开指定路径的文件。不用管文件格式,系统会默认使用对应的程序打开文件
System.Diagnostics.Process.Start(“文件全路径”);
[访问修饰符] interface I接口名
{
接口成员
}
public interface Idable
{
void Da();
}
// 实现接口
abstract class CCC:Idable // 继承自接口, 实现接口
{
// 假定没有接口存在,但是需要一个名字为Da,没有返回值,没有参数的方法
public abstract void Da();
}
this:当前对象
base:子类中代表父类对象。
一个类的方法后跟:base(),代表调用这个方法前先调用父类的构造方法
public class():base()
{
}
-> 构造方法
new string(char[])
new string(char, int)
-> 常用属性
索引(Chars) str[3]
Length
-> 常用方法
增:
构造方法
string Insert(int startindex, string value);//给下标为startindexd的位置添加value值
string string.Join(string splitStr, string[]);//用splitStr, 把字符串数组连接起来
string Replace(string, string); // "123".Replace("2", "2222");
运算符+
string string.Concat(string[]); // string.Join("", list);//把字符串数组的每个元素连接起来
string PadLeft(int, char);
// 在字符串的左边填充一定空格或字符char,直到字符长度为int所表示的长多一样为止
string PadRight(int, char);
删:
string Remove(int startIndex, int count); // "012345".Remove(3,2); => "0125"
string Substring(int startIndex, int count); // "012345".Substring(3,2); => "34"
string Trim(params char[]);
string TrimStart();
string TrimEnd();
改
首先ToCharArray(),在Join或Concat或构造函数
string ToUpper();
string ToLower();
查
bool Contains(string);
int IndexOf(char, int);
int LastIndexOf(char, int); // 获得文件名:"C:\123\456\789.mp3";
int IndexOfAny(char[], int); // 找出字符串中所有的e和a
int LastIndexOfAny(...);
bool StartsWith(string);
bool EndsWith(string);
其他
bool string.IsNullOrEmpty(string)
string[] Split(char[], StringSplitOptions.RemoveEmptyEntries); //entry
// "I have a dream".Split(' ');
bool Equals(string);
bool string.Equals(string, string);
int string.Compare(string s1, string s2);
s1 > s2 1
s1 = s2 0
s1 < s2 -1
string string.Format(string, object[]);
8、 StringBuilder
-> 字符串不可变,长期拼接字符串性能较低
-> Stringbuilder
Append(string);
AppendLine(string);
AppendFormat(“{0}{1}{2}{3}”, 1, “23”, “ab”, true);
ToString();
//读取文件的所有行
string[] lines = File.ReadAllLines(“文件路径”, Encoding.Default);