C#용 가상 한정자

10112 단어 csharp
什麼是 virtual ?

它 它 定義 的 簡單 簡單, virtual 關鍵 字 可以 可以 可以 使用 使用 於 屬性 、 、 方法 、 索引子 或 事件 定義 定義 定義 定義 定義 具有 具有 virtual 關鍵 字 字 的 類別 之 子 類別 類別 可以 可以 可以 被 覆寫 例如 例如 使用 使用 使用 關鍵 關鍵 關鍵 關鍵 關鍵 關鍵 關鍵 關鍵 關鍵 關鍵 關鍵 關鍵 關鍵 字 之 之 之 之 之 之 子 子 子 子 子 子 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的입니다. ,可以再子類別中使用 virtual 來覆寫此方法

class Shape
{
    protected int size;

    // 定義為虛擬方法
    public virtual int GetArea()
    {
        return size * size;
    }
}

class Rectangle : Shape
{
    public Rectangle(int x, int y)
    {
        X = x;
        Y = y;
    }

    public int X { get; }
    public int Y { get; }

    // 覆寫方法內容
    public override int GetArea() => X * Y;
}


反之,如果覆寫的方法不是虛擬方法,編譯器會回報錯誤,例如下列 B 類別覆寫 Foo 方法會失敗

class F
{
    public void Foo() { }
}

class B : F
{
    public override void Foo() { }
}


編譯器回報被覆寫的方法至少必須是虛擬、抽象或覆寫的其中一種


override 修飾詞不可與 virtualstaticabstractoverride 一起使用

嘗試將屬性定義為 private ,並在子類別覆寫該屬性

public class Person
{
    // virtual property
    public virtual string Name { get; set; }
}

public class Employee : Person
{
    private string name;

    // override property
    public override string Name
    {
        get { return name; }
        set
        {
            if (!string.IsNullOrEmpty(value))
                name = value;
            else
                name = "Unknown";
        }
    }
}


練習使用virtual 關鍵字

public class Shape
{
    public const double PI = Math.PI;
    protected double r, h;

    public Shape() { }

    public Shape(double r)
    {
        this.r = r;
    }

    public Shape(double r, double h)
    {
        this.r = r;
        this.h = h;
    }

    // virtual method
    public virtual double GetArea() => r;
}

public class Circle : Shape
{
    public Circle(double r) : base(r) { }

    // override method
    public override double GetArea() => r * r * PI;
}

public class Cylinder : Shape
{
    public Cylinder(double r, double h) : base(r, h) { }

    public double GetVolume() => base.GetArea() * 2 * h;
}


참조



virtual


글 읽어주셔서 감사합니다 🌷 🌻 🌼

마음에 드셨다면 주저말고 하트 꾸욱 눌러주세요❤️
또는 내 GitHub ⭐ 팔로우
또는 커피를 사주세요 ⬇️ 감사합니다.

좋은 웹페이지 즐겨찾기