Как создать общий метод с необязательным общим типом? Это то, что я прямо сейчас, который работаетОбщий метод с дополнительным общим параметром
public GridViewColumn<T> Column<D>(String HeaderText, D decorator) where D: IColumnDecorator, new()
{
GridViewColumn<T> column = new GridViewColumn<T>();
column.HeaderText = HeaderText;
column.Decorator = new D();
return column;
}
Как вы можете видеть, я должен создать экземпляр типа D (реализует IColumnDecorator) внутри метода Column().
Вопрос заключается в том, что тип «D» не является обязательным. Если Null, я хочу явно использовать стандартный ColumnDecorator, который у меня есть. что-то вроде
public GridViewColumn<T> Column<D>(String HeaderText, D decorator) where D: IColumnDecorator, new()
{
GridViewColumn<T> column = new GridViewColumn<T>();
column.HeaderText = HeaderText;
if(decorator ==null)
{
column.Decorator = new DefaultColumnDecorator();
}
else{
column.Decorator = new D();
}
return column;
}
Пожалуйста, помогите. Благодаря!
[Изменить].
Вот как я хочу использовать его в бритвенном MVC, если у меня есть реализация на заказ IColumnDecorator
@Model.[IEnumerable].Grid(grid=>{
..
...
grid.columns(
grid.Column<MyOwnColumnDecorator>("FirstColumn")
)
});
Если у меня нет какого-либо и хочу использовать по умолчанию, то я хочу, чтобы быть в состоянии сделать что-то вроде
@Model.[IEnumerable].Grid(grid=>{
..
...
grid.columns(
grid.Column("FirstColumn",null) or simply grid.Column("FirstColumn");
)
});
Почему ваш первый метод имеет проход вызывающего абонента в экземпляре 'D' вообще? Вы никогда не используете его. –
Зачем вам нужно создать экземпляр типа 'D' внутри' Column() '? Было бы гораздо более гибким, если бы вызывающий вызывал в этом экземпляре. –
Джастин, что ты имеешь в виду? и Yuxiu, я сделал это, потому что я не хочу, чтобы мой звонящий должен был указать «новое» ключевое слово конкретного типа, когда они звонят. – Liming