3
public class PhotoList : ObservableCollection<ImageFile>
{


    public PhotoList() { }

    **//this is the line that I  dont recognise!!!!!!!!!!**
    public PhotoList(string path) : this(new DirectoryInfo(path)) { }

    public PhotoList(DirectoryInfo directory)
    {
        _directory = directory;
        Update();
    }

    public string Path
    {
        set
        {
            _directory = new DirectoryInfo(value);
            Update();
        }
        get { return _directory.FullName; }
    }

    public DirectoryInfo Directory
    {
        set
        {
            _directory = value;
            Update();
        }
        get { return _directory; }
    }
    private void Update()
    {
        foreach (FileInfo f in _directory.GetFiles("*.jpg"))
        {
            Add(new ImageFile(f.FullName));
        }
    }

    DirectoryInfo _directory;
}
4

3 に答える 3

19

これはコンストラクター チェーンと呼ばれます。コンストラクターは、この構文を使用して同じ型内の他のコンストラクターを呼び出すことができます (this兄弟コンストラクターとbase基本コンストラクターを使用)。

これがどのように機能するかを示す簡単な例を次に示します。

using System;

class Program
{
    static void Main()
    {
        Foo foo = new Foo();
    }
}

class Foo
{
    public Foo() : this("hello")
    {
        Console.WriteLine("world");
    }

    public Foo(String s)
    {
        Console.WriteLine(s);
    }
}

出力:

hello
world

于 2009-05-16T12:23:58.143 に答える
2

DirectoryInfo を引数として取るクラス内の他のコンストラクターを呼び出します。

このクラスの呼び出し元を使用する方法を見てみましょう

//The empty ctor()
PhotoList list = new PhotoList();

//The ctor that takes a DirectoryInfo
PhotoList list2 = new PhotoList(new DirectoryInfo("directory")); 

//Would do the same as the code above since this constructor calls another constructor via the this() keyword
PhotoList list3 = new PhotoList("directory");
于 2009-05-16T12:28:00.973 に答える
1

これにより、文字列パラメーターを受け取るコンストラクターが DirectoryInfo パラメーターを受け取るコンストラクターを呼び出し、新しい DirectoryInfo オブジェクト (文字列をパラメーターとして使用) が渡されます。

私はよくこのアプローチを使用して、複雑なクラスに単純なコンストラクターを提供し、初期化コードを複製することなく、クラス自体がデフォルト値でプロパティを初期化できるようにします。

于 2009-05-16T12:24:39.560 に答える