美文网首页
{C#}构造器

{C#}构造器

作者: 码农猫爸 | 来源:发表于2021-11-24 10:22 被阅读0次

背景

  • 生产环境时,简化代码。
  • 单测环境时,简化代码。
using System;
using System.Diagnostics;

namespace Constructor
{
    class Program
    {
        static void Main(string[] args)
        {
            // [默认值(完全|部分)]
            // 简化了参数实例化的代码。
            // - 完整表示:var a = new A(2, new B(DateTime.Now));
            // 参数越多,嵌套层级越深,简化量越大。
            var a = new A(2);

            // [默认值+继承]
            // - 完整表示:var c = new C1(new B(DateTime.Now));
            var c = new C1();

            // [非默认值]
            var f = new F(1);
            var e = new E(f);
            var d = new D(e);
        }
    }

    #region 默认参数+无继承
    public class A
    {
        private readonly int x;
        private readonly B b;

        // [构造器传参]
        // 生产时采用默认值。
        // 单测时采用特殊值(票根)。
        // 因程序员完全掌握代码,不会出现混用默认值的情况。
        public A(int x, B b = null)
        {
            Debug.Assert(x > 0); // 检查|明示值范围

            this.x = x;
            this.b = b ?? new B();
        }
    }

    public class B
    {
        private readonly DateTime now;

        public B(DateTime now = default(DateTime))
        {
            this.now = now == default(DateTime)
                ? DateTime.Now
                : now;
        }
    }
    #endregion 默认参数+无继承


    #region 默认参数+有继承
    public abstract class C
    {
        protected readonly B b;

        public C(B b) => this.b = b ?? new B();
    }

    public class C1 : C
    {
        public C1(B b = null) : base(b) { }
    }
    #endregion 默认参数+有继承


    #region 非默认参数
    public class D
    {
        private readonly ISample sample;

        // [参数嵌套(x)]
        // 单测时模拟接口,生成(x)的单测将难以理解,此时接口是最优解。
        // 生产时,必须生成具体(x)。
        public D(ISample s) => sample = s;
    }

    public interface ISample
    {
        void DoSomething();
    }

    public class E : ISample
    {
        private readonly F f;

        public E(F f) => this.f = f;

        public void DoSomething() { }
    }

    public class F
    {
        private readonly int x;

        public F(int x) => this.x = x;
    }

    #endregion 非默认参数
}

相关文章

  • {C#}构造器

    背景 生产环境时,简化代码。 单测环境时,简化代码。

  • C#中的静态构造函数和静态初始化器

    网站收藏 C井中的静态构造函数和静态初始化器 C#给类的静态成员初始化必须用静态构造函数 关于Type Initi...

  • {C#}单测.平衡构造器

    背景 在生产和单测环境中,通过构造器注入,统一了被调类的代码。但同时,生产环境中多次实例化被调类时,也产生了重复问...

  • java编程思想5-初始化与清理

    1 构造器 不接受任何参数的构造器叫做默认构造器,如果没有编写构造器,则会自动创建无参构造器。如果有构造器,则不会...

  • Initialization in Swift

    简介 *自定义构造过程 *默认构造器 *值类型的构造器代理 *类的继承和构造过程 *可失败构造器 *必需构造器 *...

  • swift学习笔记

    1.swift类的构造器 swift构造器有三种:指定构造器和, 便利构造器, 默认构造器. 其中用'conve...

  • iOS开发 - 「Swift 学习」Swift的构造过程(值类型

    值类型的构造器代理 构造器通过调用其它构造器来完成实例的部分构造过程称为构造器代理,能够减少多个构造器间的代码重复...

  • Swift 定义枚举类

    添加构造器 便利构造器

  • Scala(四)-①-面相对象初级

    ① 构造器 Why 构造器的设计目的是为了用来初始化对象,在Scala中构造器分为主构造器和辅助构造器两种,辅助构...

  • 构造方法总结二

    构造器间的调用规则 指定构造器必须调用其直接父类的"指定构造器" 便利构造器必须调用同类中的其它构造器(指定或便利...

网友评论

      本文标题:{C#}构造器

      本文链接:https://www.haomeiwen.com/subject/anlntrtx.html