标签:调用 nta tac get 强制 sha private 不可 lin
从派生类型转型为基类型称为隐式转型,转型总会成功,不会引发异常。
从基类型转型为派生类型称为显式转型,在转型过程中可能会失败,为了执行显示转型,要在原始引用名称之前,将要转换成的类型放在前面圆括号中。
不相关的类型之间也能进行相互转换,C#允许类型包含显式与隐式转型转换符,在转型有可能失败时,开发者应定义显式转型操作符。
class GPSCoordinates
{
//...
public static implicit operator UTMCoordinates(
GPSCoordinates coordinates)
{
//implicit 隐式转换关键字
//explicit 显式转换关键字
}
}
一个类不能直接从两个类派生。
在极少数需要多继承结构的时候,一般的解决方案是使用聚合:
public class PdaItem
{
//主要基类
}
public class Person
{
//字段类
}
public class Contact : PdaItem
{ //派生类
//持有另一个类的实例
private Person InternalPerson{get; set;}
public string FirstName
{
get{return InternalPerson.FirstName;}
set{InternalPerson.FirstName = value;}
}
//...
}
缺点:
1. 因委托而增加复杂性。
? 2. 在字段类上新增的任何方法都需要人工添加到派生类中,否则Contact无法公开新增的功能。
为了正确设计类,让其他人通过继承来拓展它的功能,需要对它进行全面测试,验证派生能成功的进行。为了避免非预期的派生,并避免出现因此而产生的问题,可以把类标记为sealed。
public sealed class CommandLineParser
{
//...不能从该类派生出其他类
}
在基类中,必须将允许重写的每个成员标记为virtual,假如一个public或protected成员没有包含virtual修饰符,就不允许子类重写该成员。
public class PdaItem
{
public virtual string Name{get;set;}
}
public class Contact : PdaItem
{
public override string Name
{
//...
}
}
在实例化一个派生类的时候,运行时首先调用基类的构造器,以避免绕过对基类的初始化。假如基类没有可访问的默认构造器,我们需要在派生类构造器的头部显式指定要运行哪一个基类构造器。
public class Contact : PdaItem
{
public Contact(string name):base(name)
{
Name = name;
}
}
(abstract)抽象类是仅供派生的类,无法实例化抽象类,只能实例化从它派生的类。抽象成员定义了从抽象实体派生的对象应包含什么,但这种成员不包含实现。一个类要从抽象类成功的派生,必须为抽象基类的抽象方法提供具体的实现。
标签:调用 nta tac get 强制 sha private 不可 lin
原文地址:https://www.cnblogs.com/zhang-mo/p/9834062.html