现有一个类:
定义了一个属性:SqlStr
class A{
    protected string msSqlStr;    public string SqlStr{
        get{return this.msSqlStr;}
        set{
            this.msSqlStr=value;
        }
}再定义一个类,继承A类
class B:A{
     private void F()
     {
   
     }     //假设以下代码正确,要实现的结果如下
     protected override set(){
          this.F();//执行需要的代码
          base.set();//执行原来的set方法中的代码
     }
}在B类中,我想重载A类中属性SqlStr的set方法,实现当A类中的set事件触发时,能执行B类中的一段代码,然后载返回执行A类中的set事件本身要处理的代码
请问应该怎么做?

解决方案 »

  1.   

    class A{
        protected string msSqlStr;    public virtual string SqlStr{
            get{return this.msSqlStr;}
            set{
                this.msSqlStr=value;
            }
    }class B
    {
    public override string SqlStr{
            get{return base.msSqlStr;}
            set{
    ...        }
    }
      

  2.   

    楼主写的差不多是对的
        public class A{
            private string msSqlStr;        public virtual string SqlStr
            {
                get { return this.msSqlStr; }
                set
                {
                    this.msSqlStr = value;
                }
            }
        }    public class B : A
        {
            public override string SqlStr
            {
                get
                {
                    return base.SqlStr;
                }
                set
                {
                    Console.WriteLine("BB");
                    base.SqlStr = value;
                }
            }
        }
      

  3.   

    但是在A类中的SET方法中如果还有其他的代码,岂不是要把所有的代码都重新做一遍,这样的话,继承的意义就失去了,如:public class A{
    private string msSqlStr;public virtual string SqlStr
    {
    get { return this.msSqlStr; }
    set
    {
    this.msSqlStr = value;
    //do something else
    }
    }
    }
    在B类中是否也要写:
    set
    {
    Console.WriteLine("BB");
    base.SqlStr = value;
    //do something else
    }能不能在B类中不用在写
    //do something else
    让其在A类中执行
      

  4.   

    不是,你跟踪一下就知道了,base.SqlStr = value;这一句调用了所有写在a类set里面的代码