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
修飾詞不可與 virtual
、 static
、 abstract
或 override
一起使用嘗試將屬性定義為
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 ⭐ 팔로우
또는 커피를 사주세요 ⬇️ 감사합니다.
Reference
이 문제에 관하여(C#용 가상 한정자), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/fakestandard/virtual-modifier-for-c-2pmm텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)