接口:
派生类只能继承一个类(单根性决定的),但是如果需要继承多个类时候,就可以使用接口来实现,一个派生类可以继承多个接口,类只能单继承,但接口可以多继承
接口的成员不能加访问修饰符,默认为public
接口成员不能有定义,就是说接口不能有方法体,接口不能有实现
一个类如果继承了一个接口,则必须实现该接口中所有的成员(这里是实现,和虚方法以及抽象类中的重写类似但不同)
接口中只能有方法,属性,事件,索引器,但是不能有字段和构造函数
接口与接口之间可以继承,并且可以多继承
类可以继承接口,并且可以多继承,但是接口不能继承类
如果一个类继承了另外一个类并且实现了其他接口,则继承的类必须写在接口的前面
为了统一接口一般以I开头,以able结尾,表示我可以,表示一种能力
抽象类,静态类,接口都不能实例化
子类继承接口的时候有普通实现和显示实现两种方式,一般使用普通实现,显示实现和普通实现的效果是一样的,但是显示实现解决了子类中有相同方法的名称的问题
接口的功能亚奥尽量单一
接口实现多态:
接口类
public interface IPerson
{
string SayHelo();
}
学生类:
public class Student : IPerson
{
public string SayHelo()
{
return "I am a Student";
}
}
老师类:
public class Teacher : IPerson
{
public string SayHelo()
{
return "I am a Teacher";
}
}
多态的实现
static void Main(string[] args)
{
//用接口实现多态
IPerson[] ip = { new Student(), new Teacher() };
foreach (var item in ip)
{
Console.WriteLine(item.SayHelo());
}
Console.ReadKey();
}
值传递和引用传递
值传递:在实参传入的是一个值得时候,形参接收之后会创建一个副本,在方法中的操作其实是对副本的操作,如果不是用返回值,或者不适用ref把该值当做引用传递返回,则形参创建的副本和传入的实参是没有关系的
引用传递:在实参出入的时候,形参会创建一个实参地址的副本,这个地址指向和实参是相同的,所以在方法中对该形参副本进行操作的时候,操作的是堆上的同一个对象,修改形参副本,会同时影响传入的实参
MD5加密
MD5这个算法是不可逆的
static void Main(string[] args)
{
string str = "123";
Console.WriteLine(GetMD5(str));
Console.ReadKey();
}
public static string GetMD5(string str)
{
//创建一个MD5加密对象
MD5 md = MD5.Create();
//把需要中转换的字符串转换为字节数组
byte[] bf = System.Text.Encoding.Default.GetBytes(str);
//返回加密好的MD5字节数组
byte[] MD5bf = md.ComputeHash(bf);
//将加密好的字节数组转换成字符串
//return System.Text.Encoding.Default.GetString(MD5bf);
//转换成十六进制
string result = null;
foreach (var item in MD5bf)
{
result += item.ToString("X2");
}
return result;
}
字符型转换成字符串:
Console.WriteLine((2.5).ToString("C"));//货币
Console.WriteLine((25).ToString("D"));//十进制
Console.WriteLine((25).ToString("D5"));//5位,不够的补零
Console.WriteLine((25000).ToString("E"));//科学计数
Console.WriteLine((25).ToString("F"));//固定点
Console.WriteLine((25).ToString("F3"));//三位小数
Console.WriteLine((25).ToString("G"));//常规
Console.WriteLine((250).ToString("N"));//数字
Console.WriteLine((250).ToString("N3"));//数字,保留三位小数
Console.WriteLine((15).ToString("X"));//十六进制
Console.WriteLine((15).ToString("X2"));//十六进制,显示两位数/补位