为(任何)对象初始化创建通用方法

时间:2017-04-11 11:18:48

标签: c# class object

我的名称为<div title="your tooltip here">The content of the document......</div> 且类A内的类具有许多其他用户定义的对象属性(AB等)。对于使用类C,我需要创建实例

A

这种情况在我的项目中多次发生,它使我的代码有些不整洁。

现在我需要一些代码(或现有的库,框架)来使用更少的代码来创建这种类的实例。

2 个答案:

答案 0 :(得分:1)

好的,让我们使用Reflection,我创建了一个BaseClass,它看起来像,

public class Base {

            public Base() {
                Type type = this.GetType(); // gets current type
                var props = type.GetProperties(); // get current type's properties

                foreach (var item in props) // B and C
                {
                    object instance = Activator.CreateInstance(item.PropertyType); // create instace of both B and C
                    item.SetValue(this, instance); // set B property to new value which we have created instance 

                }


            }
        }

我们的容器类A应该来自BaseClass并且应该使用Base的构造函数,就像这样,

public class A : Base 
        {
            public A()  : base() { 

            }
            public B _B { get; set; }
            public C _C {get;set;}
        }

执行此操作后,只需从A创建实例并检查属性

希望有所帮助,

答案 1 :(得分:0)

那就是(构造函数,方法)重载是为了:)见下例:

public class ClassA {

    public ClassA() {
        // Do some generic initialization here
        this.ClassB = new ClassB();
        this.ClassC = new ClassC();
    }

    // Always call the base constructor using : this()
    public ClassA(string name, int age) : this() {
        this.Name = name;
        this.Age = age;
    }

    // chain to another, 'simpler' constructor by doing  : this(name, age)
    public ClassA(string name, int age, ClassB classB) : this(name, age) {
        this.ClassB = classB;
    }

    public ClassA(string name, int age, ClassB classV, ClassC classC) : this(name, age, classV) {
        this.ClassC = classC;
    }
    public string Name { get; set; }
    public int Age { get; set; }
    public ClassB ClassB { get; set; }
    public ClassC ClassC { get; set; }
}

public class ClassB {
    public string School { get; set; }
    public string Class { get; set; }
}

public class ClassC {
    public string Area { get; set; }
    public string Suburb { get; set; }
}

然后像这样调用它:

public SomeMethod() {
    ClassA = new ClassA("John", 40, new ClassB(), new ClassC());
}

通过重载构造函数

,您可以更轻松地进行类型初始化