【C#编程最佳实践 三】接口使用实践

简介: 【C#编程最佳实践 三】接口使用实践

目前使用到的接口使用方法大概就以下这两种,之后在持续更新,第一种就是使用工厂,第二种就是字典类。接下来详细介绍这两种方法,用好了就可以说把多态玩儿溜了。

工厂类的使用实践

创建工厂类

namespace Factory
{
    internal class ConverterFactory : FactoryBase<ConverterFactory, IConditionKeyBuilder>, IFactory<IConditionKeyBuilder>
    {
        public IConditionKeyBuilder NewObject(string className)
        {
            var result = ReflectionHelper.CreateInstance<IConditionKeyBuilder>("程序集",    "命名空间." + className);
            if (result == null)
            {
                throw new ConfigException($"{className}反射失败");
            }
            return result;
        }
    }
}

调用工厂类

调用的时候
 newrow.ConditionCode =
                 ConverterFactory.Instance.CreateObject("FieldCombinationConditionKeyBuilder").GetKeyMethod(newrow, tableconfig.Name);

字典类和接口组合的使用实践

特征码的接口和实现类

在使用的时候就可以直接依据传入的字符串来判断

//=====================================================特征码设置(依据需求判断使用哪个方法)=============================================================
        //使用接口和实现类来设置特征码
        public static readonly Dictionary<string, ConditionKeyBuilder> conditionKeyBuilder = new Dictionary<string, ConditionKeyBuilder>() {   //不同方法的解决接口
            { "FieldCombinationConditionKeyBuilder",new FieldCombinationConditionKeyBuilder(MetaDataBaseName) },
            { "ValueMappingConditionKeyBuilder",new ValueMappingConditionKeyBuilder() }
        };
        /// <summary>
        /// 根据相应的方法名获取相应的获取特征码的方式
        /// </summary>
        /// <param name="method"></param>
        /// <returns></returns>
        private ConditionKeyBuilder GetConditionKey(string builderName)
        {
            if (conditionKeyBuilder.ContainsKey(builderName))
            {
                return conditionKeyBuilder[builderName];
            }
            return null;
        }
        #region 检测该库所有表的数据迁移

比较规则的接口和实现类

在使用的时候就可以直接依据传入的字符串来判断

#region 白名单设置,获取对应方法
        //===========================================白名单设置============================
        public static readonly Dictionary<string, MethodProvider> methodProvider = new Dictionary<string, MethodProvider>() {   //不同方法的解决接口
            { "Equal",new EqualMethodProvider() },
            { "Mapping",new MappingMethodProvider() },
            { "TenanatReplace",new TenanatReplaceMethodProvider() }
        };
        /// <summary>
        /// 根据相应的方法名获取相应的算法处理方法
        /// </summary>
        /// <param name="method"></param>
        /// <returns></returns>
        private MethodProvider GetMethodProvider(string method)
        {
            if (methodProvider.ContainsKey(method))
            {
                return methodProvider[method];
            }
            return null;
        }
        #endregion 白名单设置,获取对应方法

字典类获取列名

还可以通过字典类,将对应的列序号和列明封装到字典类,这样之后对每行数据处理的时候可以随时获得当前处理字段的字段名,例如

//使用字典类获取一个列名和列次序的映射
            var dt = new Dictionary<int, String>();
            for (var j = 0; j < sourceTable.Columns.Count; j++)
            {
                var col = sourceTable.Columns[j];
                dt.Add(j, col.ColumnName);
            }


相关文章
|
1月前
|
存储 安全 数据库连接
C#深度揭秘:常量的魅力和实践,一文让你从新手到专家
C#深度揭秘:常量的魅力和实践,一文让你从新手到专家
18 0
|
1月前
|
IDE C# 开发工具
C#系列之接口介绍
C#系列之接口介绍
|
1月前
|
C#
24. C# 编程:用户设定敌人初始血值的实现
24. C# 编程:用户设定敌人初始血值的实现
22 0
|
2月前
|
SQL 数据库连接 应用服务中间件
C#WinForm基础编程(三)
C#WinForm基础编程
79 0
|
2月前
C#WinForm基础编程(二)
C#WinForm基础编程
61 0
|
2月前
|
C# 数据安全/隐私保护
C#WinForm基础编程(一)
C#WinForm基础编程
62 0
|
3月前
|
达摩院 Linux API
阿里达摩院MindOpt求解器V1.1新增C#接口
阿里达摩院MindOpt求解器发布最新版本V1.1,增加了C#相关API和文档。优化求解器产品是求解优化问题的专业计算软件,可广泛各个行业。阿里达摩院从2019年投入自研MindOpt优化求解器,截止目前经历27个版本的迭代,取得了多项国内和国际第一的成绩。就在上个月,2023年12月,在工信部产业发展促进中心等单位主办的首届能源电子产业创新大赛上,MindOpt获得电力用国产求解器第一名。本文将为C#开发者讲述如何下载安装MindOpt和C#案例源代码。
140 3
阿里达摩院MindOpt求解器V1.1新增C#接口
|
3月前
|
编译器 C# 开发者
C# 11.0中的新特性:覆盖默认接口方法
C# 11.0进一步增强了接口的灵活性,引入了覆盖默认接口方法的能力。这一新特性允许类在实现接口时,不仅可以提供接口中未实现的方法的具体实现,还可以覆盖接口中定义的默认方法实现。本文将详细介绍C# 11.0中接口默认方法覆盖的工作原理、使用场景及其对现有代码的影响,帮助开发者更好地理解和应用这一新功能。
|
3月前
|
安全 C# 开发者
C#中的默认接口方法:接口演化的新篇章
【1月更文挑战第11天】本文探讨了C# 8.0中引入的默认接口方法,这一特性允许在接口中定义具有默认实现的方法。文章介绍了默认接口方法的语法、使用场景,以及它们如何影响接口的设计和实现,同时讨论了默认接口方法带来的好处和潜在的陷阱。
|
3月前
|
网络协议 API C#
C# 中模拟 POST 和 GET 请求的原理与实践
【1月更文挑战第4天】在现代网络应用中,HTTP请求是客户端与服务器交互的基础。其中,GET和POST是最常用的两种请求方法。本文将介绍如何使用C#语言模拟这两种请求,并解释其背后的工作原理。我们将利用.NET框架中的HttpClient类来发送请求,并处理服务器的响应。通过本文,读者将能够理解HTTP请求的基本构成,学会在C#中编写代码来模拟这些请求,进而在开发过程中实现与Web服务的交互。