C#中虚拟属性与抽象属性之间的区别

以下面的例子介绍
参考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";}
	}
}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值