2010-11-04 5 views
2

A partir de ce fil: http://geekswithblogs.net/kaju/archive/2005/12/05/62266.aspx quelqu'un a demandé (dans les commentaires) cette question:constructers Chained en C# - en utilisant la logique intermédiaire

est-il possible de faire quelque chose comme ceci:

public FooBar(string fooBar) 
{ 
string[] s = fooBar.split(new char[] { ':' }); 
this(s[0], s[1]); 
} 

public Foo(string foo, string bar) 
{ 
... 
} 

Eh bien, je me suis retrouvé dans une situation où j'ai besoin de la même chose. Est-ce que c'est en quelque sorte possible? Merci d'avance.

EDIT

Je voulais dire ce

public Foo(string fooBar) 
{ 
string[] s = fooBar.split(new char[] { ':' }); 
this(s[0], s[1]); 
} 

public Foo(string foo, string bar) 
{ 
... 
} 

Foo est un constructeur.

Mon problème est que je dois faire beaucoup de logique - y compris des trucs IO - avant d'appeler l'autre constructeur.

+0

Pouvez-vous clarifier la question? Foo et FooBar sont-ils censés être tous les deux des constructeurs? Comme ils sont nommés différemment ce n'est pas tout à fait clair ce que vous voulez faire ... soit Foo devrait s'appeler FooBar, ou Foo devrait être une méthode, je suppose? –

+0

@ jamietre - oui, j'ai essayé de clarifier. Merci. – Moberg

Répondre

14

Pas directement, mais:

public FooBar(string fooBar) 
    : this(fooBar.Split(new char[] { ':' })) 
{ 
} 

private FooBar(string[] s) 
    : this(s[0], s[1]) 
{ 
} 

public FooBar(string foo, string bar) 
{ 
... 
} 
+1

+1 et en utilisant 'fooBar.Split (':')' directement au lieu de 'new char [] {':'}' –

+1

+1 mais OP doit savoir que 'var foo = new FooBar (" hi! ") ; 'aboutirait à une exception IndexOutOfRangeException. –

+1

+1 Un fooBar nul serait méchant aussi –

1

Comme vous le mentionnez, vous devrez peut-être faire « des choses IO - avant d'appeler l'autre constructeur. » Peut-être que vous voulez une méthode de création statique?

public static FooBar LoadFromFile(string fileName) 
{ 
    var foo = "Default"; 
    var bar = "Other Default"; 
    // load from the file, do a bunch of logic, 

    return new FooBar(foo, bar); 
} 
+0

Salut McKay. En fait, j'ai fini par le faire dans une méthode statique privée - pour gérer les exceptions - comme vous l'avez suggéré. J'ai écouté Tim Robinson réponse depuis que j'ai demandé - et était la plupart du temps currious - de la question du constructeur, mais merci pour votre contribution :) – Moberg

Questions connexes