标签:关键字 icc extension 数据类型 创建 概念 基本 而不是 HERE
通过在类定义前面放置关键字 abstract
,可以将类声明为抽象类;抽象类不能实例化。
public abstract class A
{
// Class members here.
}
抽象类的用途是提供一个可供多个派生类共享的通用基类定义。
例如,类库可以定义一个抽象类,将其用作多个类库函数的参数,并要求使用该库的程序员通过创建派生类来提供自己的类实现。
抽象类也可以定义抽象方法。 方法是将关键字 abstract
添加到方法的返回类型的前面。
public abstract class A
{
public abstract void DoWork(int i);
}
抽象方法没有实现,所以方法定义后面是分号,而不是常规的方法块。 抽象类的派生类必须实现所有抽象方法。 当抽象类从基类继承虚方法时,抽象类可以使用抽象方法重写该虚方法。
密封类是修饰为 sealed
的类,不能有子类;一般只有系统中的一些基本类声明为密封类。
public sealed class SealedClass
{
}
密封方法只能是在已经被重写的方法中定义,表示这个方法不可以再被重写;
class BaseClass
{
public virtual void Move()
{
//...
}
}
class DerivedClass : BaseClass
{
public sealed override void Move() //只能在重写的方法里定义sealed
{
base.Move();
}
}
密封类和密封方法的作用,是放置重写某些类导致代码的混乱,或者一些出于商业上的原因。
静态类基本上与非静态类相同,但存在一个差异:静态类无法实例化,不能继承或被继承;且只包含静态成员;不能包含实例构造函数,但可以包含静态构造函数,且不能对其构造函数使用访问修饰符。
public static class DemoStaticClass
{
public static string ReturnValue(string value)
{
return value;
}
}
public class Automobile
{
public static int NumberOfWheels = 4;
public static void Drive() { }
}
扩展方法使你能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型,现有类型既可以是 int
,string
等数据类型,也可以是自定义的数据类型。
扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用,调用扩展方法与调用在类型中实际定义的方法之间没有明显的差异。
扩展方法的第一个参数指定该方法作用于哪个类型,并且该参数以 this
修饰符为前缀。 扩展方法当然不能破坏面向对象封装的概念,所以只能是访问所扩展类的 public
成员。
扩展方法最终其实还是被编译器处理为普通静态方法的调用,本质上还是静态方法的调用,所不能访问类的外部成员。
必要条件
this
为前缀代码实现
public class Person
{
public string Name { set; get; }
public int Age { set; get; }
}
public static class MyExtensions
{
#region 基本类型扩展方法
public static int GetLength(this String value)
{
return value.Length;
}
public static int GetCount(this string value,int len)
{
return value.Length + len;
}
#endregion
#region 自定义类型扩展方法
public static bool GetBIsChild(this Person oPerson)
{
if (oPerson.Age >= 18)
return false;
else
return true;
}
#endregion
}
使用扩展方法
int len = "李白".GetLength();
int count = "李白".GetCount(2);
var oPerson1 = new Person();
oPerson1.Age = 20;
var bIsChild = oPerson1.GetBIsChild();
标签:关键字 icc extension 数据类型 创建 概念 基本 而不是 HERE
原文地址:https://www.cnblogs.com/weiyongguang/p/14477141.html