Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.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
Constructor F#使用构造函数初始化对象_Constructor_F#_Initialization - Fatal编程技术网

Constructor F#使用构造函数初始化对象

Constructor F#使用构造函数初始化对象,constructor,f#,initialization,Constructor,F#,Initialization,如果你有一个C类,格式如下: public class Person { public DateTime BirthDate { get; set; } public string Name { get; set; } } 您可以这样初始化它,这很好: let p = new Person (Name = "John", BirthDate = DateTime.Now) 但是,如果C类也有这样的构造函数,您将如何在F#中初始化它: public class Person {

如果你有一个C类,格式如下:

public class Person {
    public DateTime BirthDate { get; set; }
    public string Name { get; set; }
}
您可以这样初始化它,这很好:

let p = new Person (Name = "John", BirthDate = DateTime.Now)
但是,如果C类也有这样的构造函数,您将如何在F#中初始化它:

public class Person {
    public Person(int id)
    {
        Id = id
    }

    public int Id {get; private set;}
    public DateTime BirthDate { get; set; }
    public string Name { get; set; }
}
我们是否被迫使用这种结构

let p = new Person (123)
p.Name <- "John"
p.BirthDate <- DateTime.Now
let p=新人(123)

p、 NameSystem.UriBuilder
BCL类看起来像OP中的
Person
类,因此我将使用该类作为示例:

> let ub = UriBuilder("http://blog.ploeh.dk", Path = "about");;    
val ub : UriBuilder = http://blog.ploeh.dk:80/about
对自动属性使用等效的F#语法可能如下所示。您可以按如下方式组合构造函数和属性初始化:

type Person(id : int) =
    member val Id = id with get,set
    member val BirthDate = DateTime.MinValue with get,set
    member val Name = "" with get,set

let p = Person(5, Name = "Stu")
p |> Dump

@AntonSchwaighofer的可能副本涵盖了一个类似的主题,但询问如何通过添加构造函数来实现这一点,而引用的问题没有。我明白了,是属性名称的明确声明区分了构造函数和成员属性的初始化吗?是的,有关详细信息,请参见,包括如何混合可选构造函数参数和属性设置器,它们必须以唯一的wrt属性命名,而不是解析构造函数的逻辑如您所期望的那样。