C# base this 关键字在什么时候使用及其用法,暨使用base this操作构造函数方法

1、首先我有这样一个需求:

    public class Class1
    {
        public Class1(Stream stream);
    }

我想拿到上述代码中的Stream,上述代码又没有Stream这个属性或者GetStream()这个方法,然后上述代码是外部引用的dll,不可能更改源码,我只能这样:

    class Program
    {
        static void Main(string[] args)
        {
            var stream = new MemoryStream();
            var class1= new Class1(stream);
            DoWith(class1, stream);
        }

        static void DoWith(Class1 class1, Stream stream)
        {
            //是不是很想直接使用class1.Stream;
            //没有这个属性,我只能把stream也传过来
            //尤其是我想用this Class1 class1扩展Class1的时候,这种需求更明显
        }
    }

2、利用base二次封装这个类:

    public class Class2: Class1
    {
        public Stream Stream { get; private set; }
 
        public Class2(Stream stream) : base(stream)
        {
            Stream = stream;
        }
    }

然后我就可以这样了:

    class Program
    {
        static void Main(string[] args)
        {
            var stream = new MemoryStream();
            var class2 = new Class2(stream);
            DoWith(class2);
        }

        static void DoWith(Class2 class2)
        {
            var stream = class2.Stream;
        }
    }

3、我可能又要思考了,能不能直接把var stream = new MemoryStream();放进构造函数呢,这样我就可以不用传参了?可以:

    public class Class2 : Class1
    {
        public Stream Stream { get; private set; }

        public Class2(Stream stream) : base(stream)
        {
            Stream = stream;
        }

        //这里关键字要换成this,如果你用base那么Stream = stream;这一步就不执行了
        //如果你的需求没这么简单,不是一个简单new就能出来的,封装一个静态函数,或者用委托把,lambda也可以
        public Class2() : this(new MemoryStream())
        {

        }
    }

然后我就可以这样了:

    class Program
    {
        static void Main(string[] args)
        {
            DoWith(new Class2());
        }

        static void DoWith(Class2 class2)
        {
            var stream = class2.Stream;
        }
    }

补充:

如果你没有这种需求,看我的代码可能觉得这有什么用呢?等你碰到了类似需求你就恍然大悟了,原来可以这样写。

此处的base,this都是继承构造函数的,并不支持方法继承,C#好像缺那么个语法,就是方法别名或继承

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

上海好程序员

给上海好程序员加个鸡腿!!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值