码迷,mamicode.com
首页 > 其他好文 > 详细

一:基础知识

时间:2021-03-04 13:19:06      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:关键字   icc   extension   数据类型   创建   概念   基本   而不是   HERE   

1. 抽象类/方法

1.1 抽象类

通过在类定义前面放置关键字 abstract,可以将类声明为抽象类;抽象类不能实例化。

public abstract class A
{
    // Class members here.
}

抽象类的用途是提供一个可供多个派生类共享的通用基类定义。

例如,类库可以定义一个抽象类,将其用作多个类库函数的参数,并要求使用该库的程序员通过创建派生类来提供自己的类实现。

1.2 抽象方法

抽象类也可以定义抽象方法。 方法是将关键字 abstract 添加到方法的返回类型的前面。

public abstract class A
{
    public abstract void DoWork(int i);
}

抽象方法没有实现,所以方法定义后面是分号,而不是常规的方法块。 抽象类的派生类必须实现所有抽象方法。 当抽象类从基类继承虚方法时,抽象类可以使用抽象方法重写该虚方法。

2. 密封类/方法

2.1 密封类

密封类是修饰为 sealed 的类,不能有子类;一般只有系统中的一些基本类声明为密封类。

public sealed class SealedClass
{
}

2.2 密封方法

密封方法只能是在已经被重写的方法中定义,表示这个方法不可以再被重写;

class BaseClass
{
    public virtual void Move()
    {
        //...
    }
}

class DerivedClass : BaseClass
{
    public sealed override void Move()   //只能在重写的方法里定义sealed
    {
        base.Move();
    }
}

密封类和密封方法的作用,是放置重写某些类导致代码的混乱,或者一些出于商业上的原因。

3. 静态类/类成员

3.1 静态类

静态类基本上与非静态类相同,但存在一个差异:静态类无法实例化,不能继承或被继承;且只包含静态成员;不能包含实例构造函数,但可以包含静态构造函数,且不能对其构造函数使用访问修饰符。

public static class DemoStaticClass
{
    public static string ReturnValue(string value)
    {
        return value;
    }
}

3.3 静态方法/字段

public class Automobile
{
    public static int NumberOfWheels = 4;
    public static void Drive() { }
}

4. 扩展方法

扩展方法使你能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型,现有类型既可以是 intstring 等数据类型,也可以是自定义的数据类型。

扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用,调用扩展方法与调用在类型中实际定义的方法之间没有明显的差异。

扩展方法的第一个参数指定该方法作用于哪个类型,并且该参数以 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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!