• ado.net基础思想-abstract


    抽象类用做基类
    不能被实例化
    用途是派生出其他非抽象类

    接口主要是实现多重继承

    abstract 修饰符用于表示所修饰的类是不完整的,并且它只能用作基类。抽象类与非抽象类在以下方面是不同的:
    • 抽象类不能直接实例化,并且对抽象类使用 new 运算符会导致编译时错误。虽然一些变量和值在编译时的类型可以是抽象的,但是这样的变量和值必须或者为 null,或者含有对非抽象类的实例的引用(此非抽象类是从抽象类型派生的)。
    • 允许(但不要求)抽象类包含抽象成员。
    • 抽象类不能被密封。
    当从抽象类派生非抽象类时,这些非抽象类必须具体实现所继承的所有抽象成员,从而重写那些抽象成员。
    在下面的示例中
    abstract class A
    {
    public abstract void F();
    }
    abstract class B: A
    {
    public void G() {}
    }
    class C: B
    {
    public override void F() {
      // actual implementation of F
    }
    }
    抽象类 A 引入抽象方法 F。类 B 引入另一个方法 G,但由于它不提供 F 的实现,B 也必须声明为抽象类。类 C 重写 F,并提供一个具体实现。由于 C 没有抽象成员,因此 C 可以(但不要求)是非抽象的。

    一个简单的小例子:

    usingSystem;
    usingSystem.Collections.Generic;
    usingSystem.Linq;
    usingSystem.Web;
    usingSystem.Web.UI;
    usingSystem.Web.UI.WebControls;

    namespaceWebApplication4
    {

        publicabstractclassTest1
        {
           
            public void TestMethod1(string s1)
            {
                HttpContext.Current.Response.Write(s1);
            }
            protected abstract void TestMethod2(string s2);
        }

        publicclassTest2:Test1
        {
            protected override void TestMethod2(string s2)
            {
                HttpContext.Current.Response.Write(s2);
            }
        }

        public partialclass_Default:System.Web.UI.Page
        {
            protected void Page_Load(object sender,EventArgs e)
            {
                Test2 t2 =newTest2();
                t2.TestMethod1("aa");
            }
        }
    }

    归纳一下:

    1、抽象类可以包含抽象方法和实例方法;抽象类可以没有抽象方法,但有抽象方法的类一定是抽象类。
    2、抽象方法声明时没有实现体,类似于接口中声明的方法。
    3、抽象方法必须在派生类中通过override覆写来实现,这点也类似于接口,但不同的是实现接口的方法不用override。

  • 相关阅读:
    C++ allocator
    C++操作符重载
    Theron (C++ concurrency library) 读后感
    第五章 [BX]和loop指令
    第四章 第一个程序
    第三章 寄存器(内存访问)
    第二章 寄存器
    第一章
    jquery下ajax异步执行操作笔记
    CSSFlex布局
  • 原文地址:https://www.cnblogs.com/juexin/p/3185636.html
Copyright © 2020-2023  润新知