C# 使用扩展方法仅仅设置默认属性是否是一种好的做法?

C# 使用扩展方法仅仅设置默认属性是否是一种好的做法?,c#,.net-3.5,extension-methods,C#,.net 3.5,Extension Methods,我正在使用一组第三方控件,我正在考虑使用扩展方法来设置几乎在应用程序中使用此控件的任何时候都需要的一些属性 为这种用途构建扩展方法是一种好的实践吗?为什么呢 关于更多细节,第三方库是DevExpress,我想写的扩展方法将禁用它们的特定控件上的所有自定义和编辑 因此,与其写作 barManager.AllowCustomization = false; barManager.AllowMoveBarOnToolbar = false; barManager.AllowQuickCustomiza

我正在使用一组第三方控件,我正在考虑使用扩展方法来设置几乎在应用程序中使用此控件的任何时候都需要的一些属性

为这种用途构建扩展方法是一种好的实践吗?为什么呢

关于更多细节,第三方库是DevExpress,我想写的扩展方法将禁用它们的特定控件上的所有自定义和编辑

因此,与其写作

barManager.AllowCustomization = false;
barManager.AllowMoveBarOnToolbar = false;
barManager.AllowQuickCustomization = false;
barManager.AllowShowToolbarsPopup = false;
barManager.AutoSaveInRegistry = false;
foreach (Bar bar in barManager.Bars)
{
    bar.OptionsBar.DrawDragBorder = false;
}
我会写

barManager.DisableEditing();

是的,你绝对可以那样做。由于扩展方法只是
静态
方法的语法糖,并且您希望构建一些静态帮助器方法来配置对象的给定实例,因此它是有意义的

为了完整性起见,有时使用与fluent接口相关联的扩展方法进行控制配置:

public static class DataGridExtensions
{
    public static DataGrid AllowColumnConfiguration(this DataGrid grid)
    {
        // Add NRE check
        grid.CanUserResizeColumns = true;
        grid.CanUserSortColumns = true;
        grid.CanUserReorderColumns = true;

        return grid;
    }

    public static DataGrid AllowEdition(this DataGrid grid)
    {
        // Add NRE check
        grid.CanUserAddRows = true;
        grid.CanUserDeleteRows = true;

        return grid;
    }
}
因此,您可以这样使用它:

var grid = new DataGrid()
    .AllowColumnConfiguration()
    .AllowEdition();

对我来说似乎完全合理。关于扩展方法,你必须记住的唯一一件事是它们可以接受
null
值,所以请记住这一点。它是方法的候选者。我想说,扩展方法的标准是,你经常从不同的类中调用它。这是一个很好的答案,尽管我不知道fluent风格在这里添加了什么。可以更清楚地作为单独的语句编写。@usr是的,在本例中,fluent样式没有添加太多内容,它主要允许在一行代码中实例化和初始化控件。这可能是一个更好的例子来展示fluent样式如何帮助控件初始化(即使它实际上是一个HTML助手而不是控件),谢谢。同样在这种情况下,我需要在
bar
集合初始化之后调用扩展方法,因此我不需要在这里使用fluent样式。