F # нетривиальный неосновной конструктор - PullRequest
2 голосов
/ 17 декабря 2010

Я хочу выполнить некоторую работу в неосновном конструкторе перед вызовом первичного конструктора, например, что-то вроде этого:

type Foo(a:int,b:int) =
    let a = a
    let b = b
    new(s:string) =
        //...work here (intermediate let bindings)
        let _a = ...
        let _b = ...
        Foo(_a,_b)

Если возможно, как я могу этого достичь (теперь, когда я думаю об этом)Я даже не уверен, что это можно сделать в C #, но цель похожа на то, как вы можете вызывать базовые конструкторы везде, где вам нравится в расширяемом конструкторе классов ... но я не хочу делать ничего такого набросок,просто немного обработайте мои аргументы, прежде чем переходить к основному конструктору - или, может быть, я слишком много смотрел сегодня на экранах компьютеров)?

1 Ответ

3 голосов
/ 17 декабря 2010

Я не знаю, что вы сделали, но это работает для меня:

type Foo(a:int,b:int) =
    let a = a
    let b = b
    new (s:string) =
        printfn "some side effect"
        let _a = s.Length
        let _b = 1
        Foo(_a,_b)

Кроме того, если вы хотите вызвать базовые конструкторы в производном типе и до или после кода вставки, вот синтаксис FYI(остерегайтесь размещения брекетов):

type DFoo =
    inherit Foo

    new (a,b) =
        printfn "perform some validation here"
        let c = 0 // or bind stuff
        {
            inherit Foo(a,b)
        }
    new (s:string) =
        {
            inherit Foo(s)
        }
        then if s.Length = 0 then printfn "post ctor side effect"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...