C#,入门教程(21)——命名空间(namespace)与程序结构的基础知识

news/2024/7/23 18:25:42 标签: c#, 入门, 算法, 教程

上一篇:

 C#,入门教程(20)——列表(List)的基础知识icon-default.png?t=N7T8https://blog.csdn.net/beijinghorn/article/details/124094382

编写软件(大软件称为系统)与盖大楼一个道理。
假设咱们现在需要盖一座名为“天梯大厦”的大楼,一定设计两方面的内容:
(1)周围有哪些城市基础设施需要接入?
     网?TV?水?污水?电?气?暖?
(2)盖几层?每一层都干什么?
     设备层?顶层?

命名空间(namespace)与程序结构就是关心这些问题。

一、命名空间(namespace)

命名空间分为两种。

1、基础设施类

.NET 和第三方(你也可以是)提供了很多已经写好的工业化标准的基础代码,并编译成 dll 供你直接调用;
这些基础库,只需要在程序中 using 即可。如:

using System;
using System.IO;
using System.Text;
using System.Data;
using System.Linq;
using System.Drawing;
using System.Threading;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Threading.Tasks;
using System.Diagnostics;
using System.Windows.Forms;

using Newtonsoft.Json;
using Legalsoft.Truffer;

...

2、自行建造类

这类命名空间就是按自己需求进行设计与命名了。
同样应该采用多层次的命名方法,如同大楼每一层给与不同的名字一样,甚至可以对每一间房子给与不同的名字。

namespace K50018.Basic
{
    class set.
}

或:

namespace K50018.Algorithm.Graph
{
    class set.
}


二、文件结构

1、相关目录

稍微大一点的软件,都会有很多的 cs 文件,如何归类与设计的文件结构比较合理呢?

强烈建议在工程目录下创建 App_Code 子目录,用以保存工程相关的所有 namespace 的 class 文件。
并且按类别予以区分。

比如,幸运之门50018.COM的目录结构,按命名空间区分:

\App_Code
\App_Code\Basic  存储常用的 Helper 类的基础静态类
\App_Code\K50018 存储核心数据分类代码
\App_Code\K50018\Basic 数据分析的基础代码
\App_Code\K50018\Entity 数据体(从数据库、文件获得)的相关代码
\App_Code\K50018\Algorithm 数据分析的算法代码
\App_Code\K50018\Graph 生成走势图表等分析结果的代码


。。。

2、partial 的使用

很多  类(class)具有较多的功能(函数),写在一个文件里面不利于维护。
应该用 partial 修饰符,并将类的函数分别写道不同的 cs 文件中去。
比如:

\App-Code\Legalsoft\Algorithm\PatternSearch-KMP.cs

using System;

namespace Legalsoft.Algorithm
{
    public static partial class PatternSearch
    {
        public static List<int> KMP(string text, string pattern)
        {
            。。。
        }
    }
}


\App-Code\Legalsoft\Algorithm\PatternSearch-Booyer_Moore.cs

using System;

namespace Legalsoft.Algorithm
{
    public static partial class PatternSearch
    {
        public static List<int> Booyer_Moore(string text, string pattern)
        {
            。。。
        }
    }
}


关于更多的 namespace 

不建议使用,或尽量少使用 别名!
此谓:姓名伴一生,奶名不出门。

下一篇:

C#,入门教程(22)——函数的基础知识icon-default.png?t=N7T8https://blog.csdn.net/beijinghorn/article/details/124181689


http://www.niftyadmin.cn/n/5338446.html

相关文章

vue3+vite:封装Svg组件

前言 在项目开发过程中&#xff0c;以svg图片引入时&#xff0c;会遇到当hover态时图片颜色修改的场景&#xff0c;我们可能需要去引入另一张不同颜色的svg图片&#xff0c;或者用css方式修改&#xff0c;为了方便这种情况&#xff0c;需要封装svg组件来自定义宽高和颜色&…

CentOS Linux操作系统源码安装最新Redis版本,使用JSON数据类型踩入新坑

最近有空查阅了redis官网&#xff0c;发现redis数据类型不止Strings、Lists、Sets、Hashes、Sorted sets&#xff0c;还多了几种&#xff0c;决定先试用下JSON数据类型 1、安装Redis软件 JSON数据类型&#xff0c;对Redis版本有要求&#xff0c;需要大于4.0版本。下图是华为云…

GPT应用_PrivateGPT

项目地址&#xff1a;https://github.com/imartinez/privateGPT 1 功能 1.1 整体功能&#xff0c;想解决什么问题 搭建完整的 RAG 系统&#xff0c;与 FastGPT 相比&#xff0c;界面比较简单。但是底层支持比较丰富&#xff0c;可用于知识库的完全本地部署&#xff0c;包含大…

Flutter开发进阶之使用Socket实现主机服务

Flutter开发进阶之使用Socket实现主机服务 在Flutter开发实践中&#xff0c;有一些业务是需要主从机合作搭配的服务&#xff0c;其中一些重要的数据和功能是交由主机进行存储和管理&#xff0c;从机再通过UDP和TCP与主机通讯去获得权限&#xff0c;一般在同一个局域网内的多端…

回调地狱与解决方案

什么是回调地狱&#xff1f; 简单理解就是回调函数嵌套回调 示例&#xff1a; setTimeout(() > {console.log(1);setTimeout(() > {console.log(2);setTimeout(() > {console.log(3);}, 1000);}, 2000)}, 3000)如上代码所示&#xff0c;回调函数嵌套回调&#xff0c;就…

P2717 寒假作业 CDQ

寒假作业 传送门 题目背景 zzs 和 zzy 正在被寒假作业折磨&#xff0c;然而他们有答案可以抄啊。 题目描述 他们共有 n n n 项寒假作业。zzy 给每项寒假作业都定义了一个疲劳值 a i a_i ai​&#xff0c;表示抄这个作业所要花的精力。 zzs 现在想要知道&#xff0c;有多…

SQL两表/多表关联查询--JOIN语句

一、基础概念 SQL中的关联是通过JOIN关键字实现的&#xff0c;JOIN关键字有几种类型&#xff0c;包括INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL OUTER JOIN等。 二、INNER JOIN详解 INNER JOIN是最常用的关联方式之一&#xff0c;它返回 两个表中共同存在的数据行。 其语法…

Unity SnapScrollRect 滚动 匹配 列表 整页

展示效果 原理: 当停止滑动时 判断Contet的horizontalNormalizedPosition 与子Item的缓存值 相减,并得到最小值&#xff0c;然后将Content horizontalNormalizedPosition滚动过去 使用方式&#xff1a; 直接将脚本挂到ScrollRect上 注意&#xff1a;在创建Content子物体时…