C#,入门教程(38)——大型工程软件中类(class)修饰词partial的使用方法
上一篇:
C#,入门教程(37)——优秀程序员的修炼之道https://blog.csdn.net/beijinghorn/article/details/125011644
一、大型(工程应用)软件倚重 partial
先说说大型(工程应用)软件对源代码的文件及函数“行”数的基本要求:
(1)每个class文件不要太多行,512行就算多的了;
(2)每个函数的行数也不要太多,256行就不少了;
而实际上,很多 class 却不得不又很多行程序,因而对于(1)而言 partial 就非常重要了。
首先,partial 允许将一个 class 拆分,写到多个 .cs 文件中!
其次,partial 允许大家分工编写 class 的不同部分!
总之,partial 非常有用!
二、一些不太重要的限制
至于下面的一下局限性与限制,大致了解即可:
1、仅适用于类class、接口interface、结构struct,不支持委托delegate、枚举enum;
2、每个部分必须都有修饰符 partial;
3、位于同一个的命名空间namespace;
4、如有部分使用static/abstract/sealed,整个类都被视为static/abstract/sealed;互相不能矛盾;
5、各个部分的基类必须一致;
6、局部类型上的接口具有累加效应。
三、partial 实例
字符串匹配(Pattern Search)有很多算法,各种算法可以写在一个 静态类中。
但应该分别写在不同的 cs 文件,便于维护、协作、管理。
文件1、Legalsoft.Truffer.PatternSearch.KMP.cs
using System;
using System.Collections;
using System.Collections.Generic;
namespace Legalsoft.Truffer.Algorithm
{
/// <summary>
/// 字符串匹配(模式搜索)算法集锦
/// </summary>
public static partial class PatternSearch
{
/// <summary>
/// 字符串匹配的KMP算法
/// </summary>
/// <param name="pat"></param>
/// <param name="txt"></param>
public static List<int> KMPSearch(string pattern, string text)
{
List<int> result = new List<int>();
int M = pattern.Length;
int N = text.Length;
int[] lps = new int[M];
int j = 0;
Build_LPS_Array(pattern, M, lps);
int i = 0;
while (i < N)
{
if (pattern[j] == text[i])
{
j++;
i++;
}
if (j == M)
{
result.Add(i - j);
j = lps[j - 1];
}
else if (i < N && pattern[j] != text[i])
{
if (j != 0)
{
j = lps[j - 1];
}
else
{
i = i + 1;
}
}
}
return result;
}
/// <summary>
/// 构造 LPS 数组
/// 最长后缀数组,Longest Proper Suffix
/// </summary>
/// <param name="pattern"></param>
/// <param name="M"></param>
/// <param name="lps"></param>
private static void Build_LPS_Array(string pattern, int M, int[] lps)
{
lps[0] = 0;
int len = 0;
int i = 1;
while (i < M)
{
if (pattern[i] == pattern[len])
{
len++;
lps[i] = len;
i++;
}
else
{
if (len != 0)
{
len = lps[len - 1];
}
else
{
lps[i] = len;
i++;
}
}
}
}
}
}
PatternSearch 类的另外一个 暴力算法,写在:
文件2、Legalsoft.Truffer.PatternSearch.Native.cs
using System;
using System.Collections;
using System.Collections.Generic;
namespace Legalsoft.Truffer.Algorithm
{
/// <summary>
/// 字符串匹配(模式搜索)算法集锦
/// </summary>
public static partial class PatternSearch
{
/// <summary>
/// 字符串匹配的暴力算法
/// </summary>
/// <param name="text"></param>
/// <param name="pattern"></param>
/// <returns></returns>
public static List<int> NativeSearch(string text, string pattern)
{
int M = pattern.Length;
int N = text.Length;
int S = N - M;
List<int> matchs = new List<int>();
if (S <= 0) return matchs;
for (int i = 0; i <= S; i++)
{
int j = 0;
while (j < M)
{
if (text[i + j] != pattern[j])
{
break;
}
j++;
}
if (j == M)
{
matchs.Add(i);
}
}
return matchs;
}
}
}
——————————————————————
POWER BY 315SOFT.COM &
TRUFFER.CN
相关文章
- C# 实现winform自动悬浮
- C# 写入XML文档三种方法详细介绍
- C#基础视频教程3.3 常见控件类型和使用方法
- C# Winform退出程序的方法介绍
- [C#][EntLib]服务为何会依赖于WMI Performance Adapter服务
- 在C#代码中应用Log4Net(四)在Winform和Web中捕获全局异常
- C# DataSet.AcceptChanges 方法
- C# DataTable.NewRow 方法
- C# Foreach语句
- C#中各种编码格式的区别
- C#读写txt文件的两种方法介绍
- C# String 前面不足位数补零的方法
- C# 参数带this是什么意思(扩展方法)
- Atitit. c# 语法新特性 c#2.0 3.0 4.0 4.5 5.0 6.0 attilax总结 1. 版本历史1 1.1. C# 1.0-纯粹的面向对象2 1.2. C# 2.0
- Atitit.提升软件Web应用程序 app性能的方法原理 h5 js java c# php python android .net
- Atitit.提升软件Web应用程序 app性能的方法原理 h5 js java c# php python android .net
- Atitit.跨平台预定义函数 魔术方法 魔术函数 钩子函数 api兼容性草案 v2 q216 java c# php js.docx
- Atitit.收银机小票打印功能的设计 java php c#.net版本
- paip.截取字符串byLastDot方法总结uapi python java php c# 总结
- C#decimal数据类型——有效长度问题
- C# 虚方法virtual详解
- C#开发的OpenRA的加载界面边框的细节
- CSharp(C#)语言_第七章(语句)
- C# 中使用using的三种方法