asp.Netにおけるvirtualとabstractの区別分析
一、Virtual方法(虚方法)
virtualキーワードは、ベースクラスでメソッドを修飾するために使用されます.virtualの使用には、2つのケースがあります.1:ベースクラスでvirtualメソッドが定義されていますが、派生クラスではこの虚メソッドは書き換えられていません.派生クラスインスタンスの呼び出しでは、この虚メソッドはベースクラス定義メソッドを使用します.ケース2:ベースクラスでvirtualメソッドを定義し、派生クラスでoverrideを使用してメソッドを書き換えます.では、派生クラスインスタンスの呼び出しでは、この虚メソッドは派生書き換えメソッドを使用します.メソッドがVirtualとして宣言されると、ClassName variable=new ClassName()を使用するまで仮想メソッドです.クラスのインスタンスを宣言する前に、実際のメモリ領域には存在しません.このキーワードはクラスの継承でよく使用され、クラスメソッドのマルチステートサポートを提供します.
二、Abstract方法(抽象方法)
abstractキーワードは抽象クラスでしか修飾できず,具体的な実装はない.抽象メソッドの実装は、派生クラスでoverrideキーワードを使用して実装する必要があります.抽象メソッド宣言の使用は、派生クラスに上書きされなければならないメソッドであり、抽象クラスは継承されるために使用される.実現体のない虚の方法と見なすことができる.クラスに抽象メソッドが含まれている場合は、他の一般的なメソッドが含まれているかどうかにかかわらず、クラスを抽象クラスとして定義する必要があります.抽象クラスにエンティティはありません.三、マルチステートC#におけるマルチステートの実現は二つに分けられ、一つはコンパイル時マルチステートであり、一つは実行時マルチステート|-コンパイル時マルチステートが一つのクラスにおける複数の方法のリロードによって実現されるマルチステートであり、システムはコンパイル時に、伝達されたパラメータに基づいて具体的にどのリロードの方法を呼び出すかを決定する.|-実行時多態はvirtual関数(虚関数)、抽象方法によって実現する多態であり、派生類はoverride虚関数または抽象方法を除去し、実行時多態を実現する.四、abstractの使い方
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication3
{
public abstract class Book
{
// , , ,
public abstract void Introduce();
}
public class JavaBook : Book
{
// , , ! override
public override void Introduce()
{
Console.WriteLine("I'm Java");
}
}
public class test
{
public test()
{
JavaBook javaBook = new JavaBook();
javaBook.Introduce(); // JavaBook Introduce()
Book book = new JavaBook();
book.Introduce(); // JavaBook Introduce()
}
public static void Main()
{
test t = new test();
}
}
}
五、virtualの使い方及びoverrideの使い方
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication2
{
public abstract class Book
{
public virtual void Introduce()
{
Console.WriteLine("I'm book");
}
public virtual void SayHi()
{
Console.WriteLine("Hi, I'm book");
}
}
public class JavaBook : Book
{
public override void Introduce()
{
Console.WriteLine("I'm Java");
}
// , override
public void SayHi()
{
Console.WriteLine("Hi, I'm Java");
}
}
public class test
{
public test()
{
JavaBook javaBook = new JavaBook();
Book book = new JavaBook();
javaBook.Introduce(); // JavaBook Introduce()
book.Introduce(); // JavaBook Introduce()
javaBook.SayHi(); // JavaBook SayHi()
book.SayHi(); // Book SayHi()
}
public static void Main()
{
test t = new test();
}
}
}
六、virtualとabstractの区別慨括
(1)、virtual修飾の方法は必ず実現しなければならない(たとえ1対の括弧を追加しても)、abstract修飾の方法は必ず実現できない.virtual修飾の方法が実装されていない場合:
(2)、virtualは布団類を書き換えることができ、abstractは布団類を書き換える必要があり、virtual修飾の方法を書き換える場合は、前にoverrideを追加しなければならない(これによってコンパイラに仮想方法を書き換えることを教えた)、そして実現しなければならない.そうしないとコンパイルエラーが発生する.
(3)、クラスメンバーがabstractで修飾されている場合、抽象クラスのみが抽象メソッドを持つことができるため、クラスの前にabstractを追加する必要があります.
(4)、abstractクラスを作成できないインスタンスは、継承のみでインスタンス化できません.例えば、BaseTest 2 base 2=new BaseTest 2()コンパイルエラーが発生します.抽象クラスまたはインタフェースではインスタンスを作成できません.
(5)、C#でサブクラスでメソッドを書き換える場合は、親メソッドの前にvirtualを付け、サブクラスメソッドの前にoverrideを追加する必要があります.これにより、プログラマがサブクラスで親メソッドを誤って書き換えることを回避できます.
(6)、abstractメソッドは書き直さなければならず、virtualメソッドはabstractクラスで定義メソッドであっても実装されなければならない.
皆さんのaspについてお話ししたいと思います.Netプログラミングが役立ちます.