使用Extension方法设置默认属性是一种好习惯吗?

Rac*_*hel 4 c# extension-methods .net-3.5

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

为这种用途构建扩展方法是一种好习惯吗?为什么或为什么不呢?

有关更多详细信息,第三方库是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;
}
Run Code Online (Sandbox Code Playgroud)

我可以写

barManager.DisableEditing();
Run Code Online (Sandbox Code Playgroud)

ken*_*n2k 5

是的,你绝对可以这样做.因为扩展方法只是方法的语法糖static,并且你想构建一些静态辅助方法来配置一个给定的对象实例,所以它是有意义的.

仅为了完整性,有时使用与流畅接口关联的扩展方法来完成控制配置:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

所以你可以这样使用它:

var grid = new DataGrid()
    .AllowColumnConfiguration()
    .AllowEdition();
Run Code Online (Sandbox Code Playgroud)