virtual,sealed,override,abstract 등 수식자 작용

3083 단어 Asp.netC#
C#의 방법은 가상,override,sealed,abstract 네 가지 수식자를 도입하여 서로 다른 계승 수요를 제공한다.클래스의 허법은 이 클래스의 계승류에서 그 실현 방법을 바꿀 수 있는 방법이다. 물론 이런 변화는 방법체의 변화에만 국한되는 것이지 방법머리(방법성명)의 변화가 아니다.이불류가 바뀌는 허법은 반드시 방법 머리에 오버라이드를 붙여서 표시해야 한다.가상 방법이 호출되었을 때, 이 종류의 실례는 대상이 실행될 때 형식 (run-time type) 으로 어떤 방법체가 호출될지 결정합니다.다음 예를 참조하십시오.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Learning
{
    class Parent
    {
        public void F()
        {

            Console.WriteLine("Parent.F");
        }

        public virtual void G()
        {

            Console.WriteLine("Parent.G");
        }
    }
    class Child : Parent
    {
        /// 
        /// F()          (new)           F()   
        /// 
        public new void F()
        {

            Console.WriteLine("Child.F");
        }
        ///
        public override void G()
        {

            Console.WriteLine("Child.G");
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Child b = new Child();
            Parent a = b;

            a.F();

            b.F();

            a.G();

            b.G();

            Console.ReadLine();
        }
    }



    /*     Child F()          (new)           F()   ,
     G()       (override)          。        (new) 
        (override)   ,               ,           。
                     ——        static virtual        ,
                      。override   virtual    ,       static    */
}

클래스 Child에서 F () 방법의 성명은 부모 클래스에서 거짓이 아닌 방법 F () 의 성명을 덮어쓰기 (new) 로 차단하고, G () 방법은 덮어쓰기 (override) 로 방법을 제공하는 다중 메커니즘을 사용합니다.주의해야 할 것은 리셋 (new) 방법과 덮어쓰기 (override) 의 차이입니다. 본질적으로 리셋 방법은 컴파일할 때 귀속되고, 덮어쓰기 방법은 실행할 때 귀속됩니다.지적할 만한 것은 허법은 정태적인 방법이 될 수 없다는 것이다. 즉static과virtual로 하나의 방법을 동시에 수식할 수 없다는 것이다. 이것은 그의 운행 시 유형 분석 메커니즘에 의해 결정된 것이다.override는 반드시 가상과 함께 사용해야 하며, 물론static와 동시에 사용할 수 없다.
만약 하나의 유형의 계승 체계에서 더 이상 허법을 덮어씌우고 싶지 않다면 어떻게 해야 합니까?정답은 sealed override(밀봉 커버)입니다. sealed와 override를 동시에 수식하면 이런 목적을 달성할 수 있습니다. 그것이 바로 sealed override public void F()입니다.이것은 반드시 sealed와 override를 동시에 사용하는 것이며, 밀봉하여 덮어쓰는 허방법이나 덮어씌운 허방법일 것이다.비허를 밀봉하는 방법은 무의미하고 잘못된 것이다.
추상적 (abstract) 방법은 논리적으로 허법과 유사하지만, 허법처럼 호출될 수 없고, 하나의 인터페이스의 성명이지 실현될 수 없다.추상적인 방법은 실현할 방법이 없고, 이렇게 하는 것도 허용되지 않는다.추상적인 방법 역시 정적일 수 없다.추상적인 방법을 포함하는 클래스는 반드시 추상적인 클래스이고 abstract류의 수식자를 넣어야 한다.그러나 추상류는 반드시 추상적인 방법을 포함해야 하는 것은 아니다.추상적인 방법을 포함하는 추상적인 클래스를 계승하는 하위 클래스는 덮어쓰고 실현해야 한다(override를 직접 사용한다). 또는 abstract override를 조합해서 계속 추상적으로 만들거나 덮어쓰고 실현하지 않으면 양자의 행위는 같다.다음 예를 참조하십시오.
using System;

abstract class Parent

{ public abstract void F();

public abstract void G(); }

abstract class Child: Parent

{ public abstract override void F();}

abstract class Grandson: Child

{

public override void F()

{ Console.WriteLine(“Grandson.F”);}

public override void G()

{ Console.WriteLine(“Grandson.G”);}

}

추상적인 방법은 계승된 허법을 추상화할 수 있다.운행시 귀속과 컴파일시 귀속의 기본적인 기리를 포착하면 방법이 보여준overload,virtual,override,sealed,abstract 등의 형태를 꿰뚫어 볼 수 있다.

좋은 웹페이지 즐겨찾기