C#构造函数设计

Cod*_*key 7 c# constructor

我有一个类,你在一个文件夹中传递,然后它关闭并处理指定文件夹中的大量数据.

例如:

MyClass myClass = new MyClass(@"C:\temp");
Run Code Online (Sandbox Code Playgroud)

现在它开始了,读取说几千个文件并用数据填充该类.

我应该从构造函数中移出这些数据并将其作为单独的方法,如下所示吗?

MyClass myClass = new MyClass();
myClass.LoadFromDirectory(@"C:\temp");
Run Code Online (Sandbox Code Playgroud)

Tom*_*son 22

也许您应该使用返回对象实例的静态方法来尝试这种方式.

var myClass = MyClass.LoadFromDirectory(@"C:\temp");
Run Code Online (Sandbox Code Playgroud)

这将使初始化代码保持在构造函数之外,并为您提供您正在寻找的"一行"声明.


从海报中继续下面的评论,通过添加State实现可能是这样的:

public class MyClass
{

#region Constructors 

    public MyClass(string directory)
    {
        this.Directory = directory;
    }

#endregion

#region Properties

    public MyClassState State {get;private set;}

    private string _directory;

    public string Directory 
    {
        get { return _directory;} 
        private set 
        {
            _directory = value; 
            if (string.IsNullOrEmpty(value)) 
                this.State = MyClassState.Unknown; 
            else 
                this.State = MyClassState.Initialized;
        }
    }

#endregion



    public void LoadFromDirectory()
    {
        if (this.State != MyClassState.Initialized || this.State != MyClassState.Loaded)
            throw new InvalidStateException();

        // Do loading

        this.State = MyClassState.Loaded;
    }

}

public class InvalidStateException : Exception {}


public enum MyClassState
{
    Unknown,
    Initialized,
    Loaded
}
Run Code Online (Sandbox Code Playgroud)


Cer*_*rus 5

这取决于.您应该评估该课程的基本目的.它的功能是什么?

我通常喜欢的是让类构造函数执行类的运行所需的初始化.然后我调用类上的方法,可以安全地假设已经完成了必要的初始化.

通常,初始化阶段不应过于密集.执行上述操作的另一种方法可能是:

// Instantiate the class and get ready to load data from files.
MyClass myClass = new MyClass(@"C:\temp");

// Parse the file collection and load necessary data.
myClass.PopulateData();
Run Code Online (Sandbox Code Playgroud)

  • 这导致该类具有两个非常不同的状态 - 一个具有文件名,一个具有真实数据.在填充之后,听起来它根本不需要文件名,但它仍然需要一个变量.这种事情总让我紧张.我更喜欢静态方法方法,其中结果是"准备好行动"的对象. (5认同)
  • 话又说回来,这是一个有目的地声明的对象,具有公开的状态 (2认同)