以下面的例子介绍
参考:https://zhidao.baidu.com/question/2137815804486730428.html
public abstract class A
{
//抽象属性不能有实现代码
public abstract string AbstractProperty { get; set; }
string s;
//虚拟属性可以有实现代码
public virtual string VritualProperty
{
get { return this.s; }
set { this.s = value.ToUpper(); }
}
}
public class B : A
{
string message;
//在继承类(子类)中必须提供抽象属性的实现
public override string AbstractProperty
{
get { return message; }
set { this.message = value; }
}
//重写属性可以调用基类中的实现
public override string VritualProperty
{
get
{
return base.VritualProperty;
}
set
{
base.VritualProperty = value;
}
}
}
在代码设计的时候的区别:
抽象属性在代码设计的时候主要工作多态抽象类的抽象特性,比如
//抽象类设置为用户
public abstract class User
{
protected string name;
//将称呼设置为抽象
public abstract string called { get;set;}
}
//女性用户
public class femaleUser :User
{
public override string called
{
get{ return "Miss"+this.name;}
set{ name = value;}
}
}
//男性用户
public class maleUser :User
{
public override string called
{
get{ return "Mr."+this.name;}
set{ name = value;}
}
}
而虚拟属性在进行代码设计的时候相比于抽象方法又有一定的封装特点。
因为虚拟属性在定义的时候就已经定义了一部分内容在 “虚拟属性” 中,重写时,可以在之前定义的属性中加以修改,形成具有一定特性的新属性。
如下例所示:
class student
{
protected string id;
protected string name;
protected bool gender;
protected int Class;
protected int grade;
public virtual studentInformation
{
get{ return id+name+gender.ToString()+Class.ToString()+grade.ToString();}
}
{
class goodStudent:student
{
public override studentInformation
{
get{ return base.studentInformation +" "+ "Good Student!!!";}
}
}
class normalStudent:student
{
public override studentInformation
{
get{ return base.studentInformation +" "+ "Just Soso";}
}
}