关于普通班级的问题

时间:2011-03-18 07:45:37

标签: c# asp.net oop

我有两节课:

public class A : System.Web.UI.WebControls.Button
    {

        public virtual string X
        {
            get
            {
                object obj = ViewState["X"];
                if (obj != null) return (string)obj;
                return null;
            }

            set
            {
                ViewState["X"] = value;
            }
        }


        protected override void OnLoad(EventArgs e)
        {
            X=2;
        }

    }

public class B : System.Web.UI.WebControls.TextBox        {

        public virtual string X
        {
            get
            {
                object obj = ViewState["X"];
                if (obj != null) return (string)obj;
                return null;
            }

            set
            {
                ViewState["X"] = value;
            }
        }


        protected override void OnLoad(EventArgs e)
        {
            X=2;
        }

    }

正如你必须看到A和B类具有完全相同的代码,我的问题是如何为它创建一个公共类并使用这两个类。

1 个答案:

答案 0 :(得分:1)

继承的替代是组合。 定义一个新类并在A和B中插入它的方法的调用。在这个例子中它似乎太复杂了,但如果你决定替换ViewState [“X”]

,你将避免代码重复
class C { 
        public virtual string X
        {
            get
            {
                return ViewState["X"];
            }
            set
            {
                ViewState["X"] = value;
            }
        }     
        public SetX()
        {
            X=2;
        }
}

扩展方法也是一个很好的选择。