【C#基础】C# 程序通用结构

序号系列文章
0【C#基础】初识编程语言C#

前言

😄hello大家好,我是writer桑,前面的章节了解了编程语言C#和.NET平台,那么本章就开始学习C#中的程序结构的相关内容,希望看完大家能够有所收获,感谢支持!


程序结构

C# 中的关键组织结构概念包括程序命名空间类型成员程序集。 程序声明类型,而类型则包含成员,并被整理到命名空间中。类型示例包括类、结构和接口成员示例包括字段、方法、属性和事件。 编译完的 C# 程序实际上会打包到程序集中。程序集的文件扩展名通常为 .exe 或 .dll,具体视其分别实现的是应用程序还是库而定。

1. 程序实例

接下来我们看一个数据结构堆栈程序的实例,请思考包含以下代码的程序集:

using System;       // using 指令的用法 

namespace Acme.Collections      // namespace 命名空间的用法 
{
    // Stack栈类的声明 
    public class Stack<T>
    {
        Entry _top;

        // 推入元素操作 
        public void Push(T data)
        {
            _top = new Entry(_top, data);
        }

        // 删除并抛出元素
        public T Pop()
        {
            if (_top == null)
            {
                throw new InvalidOperationException();      // 如果栈为空,直接抛出无效操作的异常
            }

            T result = _top.Data;       // 取出顶部的元素赋给result
            _top = _top.Next;           // 使其指针指向下一个元素 
            return result;
        }

        // 嵌套类Entry 
        class Entry
        {
            public Entry Next { get; set; }
            public T Data { get; set; }
            public Entry(Entry next, T data)
            {
                Next = next;
                Data = data;
            }
        }
    }
	
   	// 需要被其它文件引用,这里 Main方法加上注释。
    /*
    public class Program
    {
        // 程序开始和结束的地方,Main方法
        static void Main(string[] args)
        {
            Stack<int> s = new Stack<int>();
            s.Push(1);
            s.Push(10);                     // 堆栈包括1, 10 
            Console.WriteLine(s.Pop());
            Console.WriteLine(s.Pop());
            Console.WriteLine(s.Pop());     // InvalidOperationException: 堆栈为空 
        }
    }
    */
}
  • 程序的第一行 using Systemusing 指令的用法,即在程序中引用 System 命名空间;一个程序允许有多个 using 关键字的存在,注意在C#程序中 using 指令的用法还有两种,分别是为类型创建别名和释放资源。
  • 程序的第三行使用 namespace 关键字创建命名空间,即此程序的命名空间名为 Acme.Collections ;在C#程序中,命名空间在两个方面被大量使用分别为: .NET使用命名空间来组织它的许多类、 控制类和方法名称的范围空间
  • 接下来几行即 class 类的声明; 此类的完全限定的名称为Acme.Collections.Stack。 类中包含多个成员:一个 _top 字段、两个方法 PushPop 和一个 Entry 嵌套类。
  • Entry 类还包含三个成员:一个名为 Next 的属性、一个名为 Data 的属性和一个构造函数。Stack 是泛型类。它具有一个类型参数 T,在使用时替换为具体类型。
  • 接下来使用 class 关键字声明 Program 类,并且定义了 Main 方法;Main 方法是可执行程序的入口点,也是程序控制开始和结束的位置。其中 Main 方法的参数 string[] args 表示接收控制台命令的参数,不需要时也可不写。
  • // 在 C# 程序中表示单行注释,此外还有 // 表示多行注释、XML注释方式 /// 用来解释代码块的具体含义,便于开发者理解。

堆栈的解释:

堆栈是一个“先进后出”(FILO) 集合。 添加到堆栈顶部的新元素。 删除元素时,将从堆栈顶部删除该元素。 前面的示例声明定义堆栈的存储和行为的 Stack 类型。 可以声明一个引用 Stack 类型的实例的变量来使用该功能。

2. 程序集

程序集包含中间语言 (IL) 指令形式的可执行代码和元数据形式的符号信息。 执行前,.NET 公共语言运行时的实时 (JIT) 编译器会将程序集中的 IL 代码转换为特定于处理器的代码。

由于程序集是包含代码和元数据的自描述功能单元,因此无需在 C# 中使用 #include 指令和头文件。 只需在编译程序时引用特定的程序集,即可在 C# 程序中使用此程序集中包含的公共类型和成员。 例如,此程序使用 acme.dll 程序集中的 Acme.Collections.Stack 类, 示例代码如下:

using Acme.Collections;     //  引用 Acme.Collections 命名空间 

class Example
{
    public static void Main()
    {
        var s = new Acme.Collections.Stack<int>();      // 生成一个堆栈s 
        s.Push(1);              // 堆栈包含 1
        s.Push(10);             // 堆栈 1, 10
        s.Push(100);            // 堆栈 1, 10, 100
        Console.WriteLine(s.Pop()); // 堆栈 1, 10
        Console.WriteLine(s.Pop()); // 堆栈 1
        Console.WriteLine(s.Pop()); // 堆栈是空的
    }
} 
  • 若要编译此程序,需要引用包含前面示例中定义的堆栈类的程序集。 (using Acme.Collections; )
  • C# 程序可以存储在多个源文件中。在编译 C# 程序时,将同时处理所有源文件,并且源文件可以自由地相互引用。从概念上讲,就好像所有源文件在被处理之前都连接到一个大文件。
  • 在 C# 中永远都不需要使用前向声明,因为声明顺序无关紧要(极少数例外情况除外)。 C# 并不限制源文件只能声明一种公共类型,也不要求源文件的文件名必须与其中声明的类型相匹配。

3. 顶级语句

顶级语句也即不使用 Main 方法的程序,从 C# 9 开始,无需在控制台应用程序项目中显式包含 Main 方法。 相反,可以使用顶级语句功能最大程度地减少必须编写的代码。 在这种情况下,编译器将为应用程序生成类和 Main 方法入口点。

也就是从 C# 9 开始,在程序中直接写出以下代码即可运行:

Console.WriteLine("Hello World!");

注意:

  • 一个应用程序只能有一个入口点,也就是一个项目只能有一个包含顶级语句的文件。 在项目中的多个文件中放置顶级语句会导致编译器错误:只有一个编译单元可具有顶级语句
  • 可以显式编写 Main 方法,但它不能作为入口点。 编译器将发出以下警告:程序的入口点是全局代码;忽略“Main()”入口点

结语

✔️ 以上就是C#程序结构的介绍,希望能够对大家有所帮助。请大家多多支持,你们的支持就是笔者创作最大的动力!

  • 11
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论
----------Database-------------- 1.DataTable帮助类(DataTableHelper.cs) 2.Access数据库文件操作辅助类(JetAccessUtil.cs) 5.查询条件组合辅助类(SearchCondition.cs) 6.查询信息实体类(SearchInfo.cs) 8.Sql命令操作函数(可用于安装程序的时候数据库脚本执行)(SqlScriptHelper.cs) ----------Device-------------- 声音播放辅助类(AudioHelper.cs) 摄像头操作辅助类,包括开启、关闭、抓图、设置等功能(Camera.cs) 提供用于操作【剪切板】的方法(ClipboardHelper.cs) 获取电脑信息(Computer.cs) 提供用户硬件唯一信息的辅助类(FingerprintHelper.cs) 读取指定盘符的硬盘序列号(HardwareInfoHelper.cs) 提供访问键盘当前状态的属性(KeyboardHelper.cs) 全局键盘钩子。这可以用来在全球范围内捕捉键盘输入。(KeyboardHook.cs) 模拟鼠标点 击(MouseHelper.cs) 全局鼠标钩子。这可以用来在全球范围内捕获鼠标输入。(MouseHook.cs) MP3文件播放操作辅助类(MP3Helper.cs) 关联文件(ExtensionAttachUtil.cs) 注册文件关联的辅助类(FileAssociationsHelper.cs) 打开、保存文件对话框操作辅助类(FileDialogHelper.cs) 常用的文件操作辅助类FileUtil(FileUtil.cs) INI文件操作辅助类(INIFileUtil.cs) 独立存储操作辅助类(IsolatedStorageHelper.cs) 序列号操作辅助类(Serializer.cs) 获取一个对象,它提供用于访问经常引用的目录的属性。(SpecialDirectories.cs) 简单的Word操作对象(WordCombineUtil.cs) 这个类提供了一些实用的方法来转换XML和对象。(XmlConvertor.cs) XML操作类(XmlHelper.cs) ----------Format-------------- 参数验证的通用验证程序。(ArgumentValidation.cs) 这个类提供了实用方法的字节数组和图像之间的转换。(ByteImageConvertor.cs) byte字节数组操作辅助类(BytesTools.cs) 处理数据类型转换,数制转换、编码转换相关的类(ConvertHelper.cs) CRC校验辅助类(CRCUtils.cs) 枚举操作公共类(EnumHelper.cs) 身份证操作辅助类(IDCardHelper.cs) 检测字符编码的类(IdentifyEncoding.cs) RGB颜色操作辅助类(MyColors.cs) 日期操作类(MyDateTime.cs) 转换人民币大小金额辅助类(RMBUtil.cs) 常用的字符串常量(StringConstants.cs) 简要说明TextHelper。(StringUtil.cs) 获取中文字首字拼写,随机发生器,按指定概率随机执行操作(Util.cs) 各种输入格式验证辅助类(ValidateUtil.cs) ----------Network-------------- Cookie操作辅助类(CookieManger.cs) FTP操作辅助类(FTPHelper.cs) HTML操作类(HttpHelper.cs) 网页抓取帮助(HttpWebRequestHelper.cs) Net(NetworkUtil.cs) IE代理设置辅助类(ProxyHelper.cs) ----------Winform-------------- 跨线程的控件安全访问方式(CallCtrlWithThreadSafety.cs) CheckBoxList(CheckBoxListUtil.cs) 窗口管理类(ChildWinManagement.cs) 由马丁·米勒http://msdn.microsoft.com/en-us/library/ms996492.aspx提供一个简单的方法打印工作的一个RichTextBox一个帮手(ExRichTextBoxPrintHelper.cs) 显示,隐藏或关闭动画形式。(FormAnimator.cs) 对窗体进行冻结、解冻操作辅助类(FreezeWindowUtil.cs) 窗体全屏操作辅助类(Ful

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哈桑indie

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值