Вместо того, чтобы полагаться на явное свойство, сообщающее вам, когда инициализируется ваш объект, вы можете использовать метод DoSomething
для проверки того, что он обладает информацией, необходимой для его работы. Ваш пример довольно грубый, и я ожидаю, что ваша реальная реализация более сложна, поэтому я просто предположу, что Property1
и Property2
должны быть присвоены что-то (то есть просто не пустая строка перед продолжением) :
class Foo
{
public Foo(string p1, string p2)
{
Property1 = p1;
Property2 = p2;
}
string Property1 { get; set; }
string Property2 { get; set; }
public void DoSomething()
{
// *** Replace this with something valid to your real code
if(!string.IsNullOrEmpty(Property1) || !string.IsNullOrEmpty(Property2))
return; // Don't want to continue if not initialized
// Do something here
}
}
UPDATE
Не имея представления об объектной модели, с которой вы на самом деле работаете, вот возможная альтернатива, основанная на модели, широко используемой в рамках фреймворка:
class Foo
{
public void DoSomething(FooConfig config)
{
}
}
OR
class Foo
{
private FooConfig config_;
public Foo(FooConfig config)
{
config_ = config;
}
public void DoSomething()
{
}
}
Где FooConfig
определяется:
class FooConfig
{
public string Property1 { get; set; }
public string Property2 { get; set; }
}
И DoSomething
вызывается с помощью:
(new Foo()).DoSomething(new FooConfig() { Property1 = "abc"; Property2 = "def"; });
OR
(new Foo(new FooConfig() { Property1 = "abc"; Property2 = "def"; })).DoSomething();
Это можно легко изменить, чтобы приспособить использование конструктора к Foo
или FooConfig
.