using System;
abstract class A
{
public void F()
{
Console.WriteLine("A.F");
}
public abstract void G();
internal virtual void a()
{
Console.WriteLine("A.F");
}
}
class B:A
{
public void F()
{
Console.WriteLine("B.F");
}
public override void G()
{
Console.WriteLine("B.G");
}
internal new void a()
{
Console.WriteLine("A.F");
}
}
class Class1
{
[STAThread]
static void Main(string[] args)
{
B b = new B();
A a = b;
a.F();
a.G();
b.F();
b.G();
}
}
abstract class A
{
public void F()
{
Console.WriteLine("A.F");
}
public abstract void G();
internal virtual void a()
{
Console.WriteLine("A.F");
}
}
class B:A
{
public void F()
{
Console.WriteLine("B.F");
}
public override void G()
{
Console.WriteLine("B.G");
}
internal new void a()
{
Console.WriteLine("A.F");
}
}
class Class1
{
[STAThread]
static void Main(string[] args)
{
B b = new B();
A a = b;
a.F();
a.G();
b.F();
b.G();
}
}
抽象类具有以下特性:
- 抽象类不能实例化。
- 抽象类可以包含抽象方法和抽象访问器。
- 不能用 sealed 修饰符修改抽象类,这意味着该类不能被继承。
- 从抽象类派生的非抽象类必须包括继承的所有抽象方法和抽象访问器的实实现。
在方法或属性声明中使用 abstract 修饰符以指示此方法或属性不包含实现。
抽象方法具有以下特性:
- 抽象方法是隐式的 virtual 方法。
- 只允许在抽象类中使用抽象方法声明。
- 实现由 overriding 方法提供,它是非抽象类的成员。
- 在抽象方法声明中使用 static 或 virtual 修饰符是错误的。
除了在声明和调用语法上不同外,抽象属性的行为与抽象方法一样。
- 在静态属性上使用 abstract 修饰符是错误的。
- 在派生类中,通过包括使用 override 修饰符的属性声明可以重写抽象的继承属性。
抽象类必须为所有接口成员提供实现。
实现接口的抽象类可以将接口方法映射到抽象方法上。例如:
interface I
{
void M();
}
abstract class C: I
{
public abstract void M();
}
{
void M();
}
abstract class C: I
{
public abstract void M();
}
static,virtual,override,abstract不能同时使用
new不能和override同时使用
浙公网安备 33010602011771号