Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 具有空主体和继承式语法的构造函数做什么? 公共类照片列表:ObservableCollection { 公共照片列表(){} **//这是我不认识的那条线** 公共照片列表(字符串路径):此(新目录信息(路径)){} 公共照片列表(目录信息目录) { _目录=目录; 更新(); } 公共字符串路径 { 设置 { _目录=新目录信息(值); 更新(); } 获取{return\u directory.FullName;} } 公共目录信息目录 { 设置 { _目录=值; 更新(); } 获取{return\u directory;} } 私有void更新() { foreach(FileInfo f在_directory.GetFiles(“*.jpg”)中) { 添加(新图像文件(f.FullName)); } } DirectoryInfo\u目录; }_C#_Constructor_Constructor Chaining - Fatal编程技术网

C# 具有空主体和继承式语法的构造函数做什么? 公共类照片列表:ObservableCollection { 公共照片列表(){} **//这是我不认识的那条线** 公共照片列表(字符串路径):此(新目录信息(路径)){} 公共照片列表(目录信息目录) { _目录=目录; 更新(); } 公共字符串路径 { 设置 { _目录=新目录信息(值); 更新(); } 获取{return\u directory.FullName;} } 公共目录信息目录 { 设置 { _目录=值; 更新(); } 获取{return\u directory;} } 私有void更新() { foreach(FileInfo f在_directory.GetFiles(“*.jpg”)中) { 添加(新图像文件(f.FullName)); } } DirectoryInfo\u目录; }

C# 具有空主体和继承式语法的构造函数做什么? 公共类照片列表:ObservableCollection { 公共照片列表(){} **//这是我不认识的那条线** 公共照片列表(字符串路径):此(新目录信息(路径)){} 公共照片列表(目录信息目录) { _目录=目录; 更新(); } 公共字符串路径 { 设置 { _目录=新目录信息(值); 更新(); } 获取{return\u directory.FullName;} } 公共目录信息目录 { 设置 { _目录=值; 更新(); } 获取{return\u directory;} } 私有void更新() { foreach(FileInfo f在_directory.GetFiles(“*.jpg”)中) { 添加(新图像文件(f.FullName)); } } DirectoryInfo\u目录; },c#,constructor,constructor-chaining,C#,Constructor,Constructor Chaining,这称为构造函数链接-构造函数可以使用此语法调用同一类型内的其他构造函数(对于同级构造函数使用,对于基本构造函数使用) 下面是一个简单的示例,展示了它的工作原理: public class PhotoList : ObservableCollection<ImageFile> { public PhotoList() { } **//this is the line that I dont recognise!!!!!!!!!!** public Pho

这称为构造函数链接-构造函数可以使用此语法调用同一类型内的其他构造函数(对于同级构造函数使用
,对于基本构造函数使用

下面是一个简单的示例,展示了它的工作原理:

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;
}
输出:

你好

world


它使接受字符串参数的构造函数调用接受DirectoryInfo参数的构造函数,并向其传递一个新的DirectoryInfo对象(该对象反过来使用字符串作为参数)


我经常使用这种方法为复杂类提供更简单的构造函数,让类本身使用默认值初始化属性,而不必重复初始化代码。

它调用类中以DirectoryInfo为参数的另一个构造函数

让我们看看如何使用这个类的调用者

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);
    }
}

以前也没见过。最初似乎是一个糟糕的设计选择,因为调用代码看不到链式构造函数?可以是wrong@NickAllen链接被认为是类的内部(实现)问题,因此调用方不应该知道。例如,您可以有两个公共构造函数链接到一个共享私有构造函数
//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");