У меня есть класс, который содержит несколько методов, например .:C# ограничить методы к другим методам
class mySqlTool{
private string _values, _table, _condition, _result;
public mySqlTool Select(string values = null){
//this is REQUIRED
_values = string.Format("select {0} ", values);
return this;
}
public mySqlTool Update(string table){
//this is REQUIRED
_table = table;
return this;
}
public mySqlTool Set(string name, String value){
//this is REQUIRED
//handle name and value
return this;
}
public mySqlTool From(string table = null){
//this is REQUIRED
_table = table;
return this;
}
public mySqlTool Where(string condition = null){
//this is OPTIONAL
_condition = condition;
return this;
}
public string Execute(){
//this is REQUIRED
//this is samplecode, of course here is checked if its select or update
//but to keep it short i erased it
statement = string.Format("{0} {1}", _values, _table);
if (!string.IsNullOrEmpty(_condition))
{
statement += string.Format(" where {0}", _condition);
}
//do some with statemen and fill result
return _result;
}
}
Я теперь использую это в этом цепном способе:
MySqlTool t = new MySqlTool();
string result = t.Select("a,b,c").From("x").Where("foo=bar").Execute();
My VS обеспечивает меня доступные методы когда я ударил DOT (.)
.
Моя проблема, я хочу, чтобы использовать дение некоторых методов, прежде чем другие методы были использованы, например:
MySqlTool.Where().Select().From().Execute();
В этом случае .C()
не должен быть отозван Befor .A()
называется. Таким образом, чтобы уточнить, Что позволено и Что не так, вот небольшой список
//Allowed
t.Select().From().Execute();
t.Select().From().Where().Execute();
t.Update().Set().Set().Set().Where().Where().Where().Execute();
//not Allowed
t.Select().Where().Execute();
t.Select().Select().Select().From().Execute();
t.From()...
t.Where()...
t.Execute()....
Я читал некоторые об интерфейсах, а также о состоянии, но я не уверен, если это то, что поиск им для.
Так что мой вопрос:
Это то, что я хочу, даже возможно?
Если да, то как называется этот метод?
Состояние машины для .net? – ilansch
Этот метод называется «беглый intreface». – Evk
Не во время компиляции, во время выполнения вы можете иметь состояние. Просто ... Не надо. – Thomas