C#学习 - 初识类与名称空间

类(class)& 名称空间(namespace)

是最基础的 C# 类型,是一个数据结构,是构成程序的主体
名称空间以树型结构组织

using System;
//前面的using就是引用名称空间
//相当于C语言的 #include <...>
namespace ConsoleApp//名称空间
{internal class Program//类{static void Main(string[] args){Console/*类*/.WriteLine("Hello,world!");//当最前面没有引用名称空间时,需要在此段代码前加上名称空间:>System.Console.WriteLine("Hello,world!");//System/*类库*/.Console/*名称空间*/.WriteLine/*类*/}}
}

上段代码中:Program和Console就是类;ConsoleApp就是名称空间
建立了一个叫Program的类放在了一个叫ConsoleApp的名称空间中

using System.Windows;
using System.Windows.Shapes;
using System.IO;namespace WpfApp1
{public partial class MainWindow : Window{public MainWindow(){InitializeComponent();Path//因为 System.IO 和 System.Windows.Shapes 中都有Path,//所以此时使用Path要使用名称空间,如:System.IO.Path 或 System.Windows.Shapes.Path}}
}

类库的引用

类库引用是使用名称空间的物理基础
引用方式:DLL引用、项目引用

DLL引用

又称黑盒引用,无源代码
在解决方案资源管理器 - 项目 - 引用 - 添加引用
一般进行DLL引用时会有参考文档
DLL引用因为没有源代码,如果类库中有错误,无法自己进行修改

namespace M
{class Program{static void Main(string[] args){A/*类库*/.B/*名称空间*/.C/*类*/;}}
}

此处进行DLL引用的程序会对所引用的DLL类库有依赖性;同时程序内的Program和C有依赖关系,C发生错误时,Program也会错误

NuGet

程序目标:打开一个WPF窗口

//先引用 PresentationFramework 类库
namespace ConsoleApp1
{internal class Program{static void Main(string[] args){System.Windows.Window window = new System.Windows.Window();window.ShowDialog();//ShowDialog是类的使用方法}}
}

此时程序会报错,因为此类库还有一些更底层的依赖类库,需要先引用底层类库才能使用,就相当于使用某些模组时需要先加载前置模组
当一个类库的底层类库过多时,引用起来就很麻烦,这时候可以用到NuGet
在解决方案资源管理器 - 项目 - 引用 - 管理NuGet程序包中安装引用所需要的包后,引用中会自动添加NuGet包中的类库,这些添加的类库是由NuGet管理

项目引用

又称白盒引用,有源代码,当程序出现错误时可以直接修改
需要先将项目添加进正在使用的解决方案资源管理器
然后在解决方案资源管理器 - 项目 - 引用 - 添加引用 - 项目 - 解决方案中引用
若一个项目在不同解决方案资源管理器中都有使用时,称为项目重用

创建类库项目

解决方案资源管理器 - 添加新建项目(非新建项) - 选择类库
类库的框架需要与此前项目框架相同
例子:
解决方案管理器

//Tools.cs
namespace Arithmetic
{public class Tools{public static double Add(double a, double b){return a + b;}public static double Sub(double a, double b){return a - b;}public static double Mul(double a,double b){return a * b;}public static double Div(double a, double b){if(b==0){return double.PositiveInfinity;}else{return a / b;}}}
}
//Program.cs
using System;
using Arithmetic;namespace Calculator
{internal class Program{static void Main(string[] args){double c = Tools.Div(10, 9);Console.WriteLine(c);}}
}

依赖关系

类(或对象)之间的耦合关系
底层类或者类库出现问题,上层的类或类库也会出现关系
写程序时,类应该分类放在对应的类库中;类或类库之间应该尽可能降低依赖。“高内聚,低耦合”

UML(通用建模语言)类图

可以用来展现类与类之间的关系

错误排除

阅读编译器报错
结合MSDN文档与搜索引擎
注:MSDN文档在VS的帮助 - 查看帮助中,需要先在VS Installer - 单个组件中下载Help Viewer

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/73569.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[Linux]动静态库

[Linux]动静态库 文章目录 [Linux]动静态库见一见库存在库的原因编写库模拟编写静态库模拟使用静态库模拟编写动态库模拟使用静态库 库的加载原理静态库的加载原理动态库的加载原理 库在可执行程序中的编址策略静态库在可执行程序中的编址策略动态库在可执行程序中的编址策略 见…

网络安全架构:建立安全架构方法的指导框架

01 关键发现 ■ 架构框架使用集体见解来创建最佳实践&#xff0c;指导用户考虑组织风险和业务环境。这些方法的改编和定制&#xff0c;将帮助组织从中获得最佳价值。 ■ 方法论提供了一种系统工程方法&#xff0c;使用业务输入和期望&#xff0c;来创建可重复、可跟踪&#xf…

16 “count(*)“ 和 “count(1)“ 和 “count(field1)“ 的差异

前言 经常会有面试题看到这样的问题 “ select count(*) ”, “ select count(field1) ”, “ select count(1) ” 的效率差异啥的 然后 我们这里 就来探索一下 这个问题 我们这里从比较复杂的 select count(field1) 开始看, 因为 较为复杂的处理过程 会留一下一些关键的调试…

第23章 信号量实验(iTOP-RK3568开发板驱动开发指南 )

在上面两个章节对自旋锁和自旋锁死锁进行了学习&#xff0c;自旋锁会让请求的任务原地“自旋”&#xff0c;在等待的过程中会循环检测自旋锁的状态&#xff0c;进而占用系统资源&#xff0c;而本章节要讲解的信号量也是解决竞争的一种常用方法&#xff0c;与自旋锁不同的是&…

无需麻烦验证,文字验证码一键通过

前言 文字验证码&#xff0c;简单易用&#xff0c;安全可靠&#xff01;不需要麻烦的图形识别。这种验证方式不仅方便快捷&#xff0c;而且能有效防止恶意攻击和机器人访问。无需担心复杂操作&#xff0c;只需几秒钟就能完成验证过程。保护您的个人信息和数据安全&#xff0c;…

【HTML专栏4】常用标签(标题、段落、换行、文本格式化、注释及特殊字符)

本文属于HTML/CSS专栏文章&#xff0c;适合WEB前端开发入门学习&#xff0c;详细介绍HTML/CSS如果使用&#xff0c;如果对你有所帮助请一键三连支持&#xff0c;对博主系列文章感兴趣点击下方专栏了解详细。 博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;HTML/CS…

在VScode中如何将界面语言设置为中文

VSCode安装后的默认界面是只有英文的&#xff0c;如果想用中文界面&#xff0c;那么就需要安装对应的插件&#xff0c;vscode插件可以从扩展中心去搜索并安装。 安装vscode后打开vscode&#xff0c;点击左侧的扩展按钮。 在搜索框中输入chinese&#xff0c;弹出chinese&#x…

2023高教社杯数学建模国赛C题思路解析+代码+论文

如下为C君的2023高教社杯全国大学生数学建模竞赛C题思路分析代码论文 C题蔬菜类商品的自动定价与补货决策 在生鲜商超中&#xff0c;一般蔬菜类商品的保鲜期都比较短&#xff0c;且品相随销售时间的增加而变差, 大部分品种如当日未售出&#xff0c;隔日就无法再售。因此&…

nmp ERR! code ERR SOCKET TIMEOUT nmp ERR!network npmSocket timeout(已解决)

当安装vue-cli时&#xff0c;出现超时错误 npm ERR! code ECONNRESET npm ERR! network This is a problem related to network connectivity npm ERR! code ECONNRESET npm ERR! network aborted npm ERR! network This is a problem related to network connectivity. npm E…

用go实现一个循环队列

目录 队列数组队列的“假溢出”现象循环队列三种判断队列空和满的方法无下标&#xff08;链式&#xff09;有下标&#xff08;顺序&#xff09;长度标记 go用顺序表实现一个循环队列队列的链式存储结构 队列 队列&#xff08;queue&#xff09;是只允许在一端进行插入操作&…

Python—下载清华大学鹏城实验室遥感数据

当想下载清华大学鹏城实验室10m土地利用数据的时候&#xff0c;发现他们的下载方式很奇怪&#xff0c;只能一页页的点名称全选 &#xff0c;然后批量下载&#xff0c;再一个个的加入浏览器下载&#xff0c;当一次下载过多就回卡顿和下载失败&#xff0c;所以就有了想用python进…

C++项目实战——基于多设计模式下的同步异步日志系统-①-项目介绍

文章目录 专栏导读项目介绍开发环境核心技术环境搭建日志系统介绍1.为什么需要日志系统2.日志系统技术实现2.1同步写日志2.2异步写日志 专栏导读 &#x1f338;作者简介&#xff1a;花想云 &#xff0c;在读本科生一枚&#xff0c;C/C领域新星创作者&#xff0c;新星计划导师&a…

Java23种设计模式之【单例模式】

目录 一.单例模式的起源&#xff0c;和应用场景 1.单例模式的前世今生&#xff01; 2.什么是单例模式&#xff1f; 2.1使用单例模式的注意事项 2.2如何理解单例模式&#xff1f; 2.3单例模式的优势以及不足&#xff01; 2.4使用场景 二.实现 1.实现思路 1.1创建一个 S…

基于SSM的网络游戏公司官方平台

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

python实现zscore归一化和minmax标准化

zscore归一化&#xff1a; minmax from sklearn import preprocessing from sklearn.preprocessing import StandardScaler import numpy as np# 数据 x np.array([[1.,-1.,2.],[2.,0.,0.],[0.,1.,-1.]]) print(----------------minmaxscaler标准化-------------) # 调用minma…

初始化一个 vite + vue 项目

创建项目 首先使用以下命令创建一个vite项目 npm create vite然后根据提示命令 cd 到刚创建的项目目录下&#xff0c;使用npm install安装所需要的依赖包&#xff0c;再使用npm run dev即可启动项目 配置 vite.config.js 添加process.env配置&#xff0c;如果下面 vue-route…

mysql课堂笔记 mac

目录 启动mac上的mysql 进入mysql mac windows 创建数据库 创建表 修改字段数据类型 修改字段名 增加字段 删除字段 启动mac上的mysql sudo /usr/local/mysql/support-files/mysql.server start 直接输入你的开机密码即可。 编辑 进入mysql mac sudo /usr/local…

Java认识异常(超级详细)

目录 异常的概念和体系结构 异常的概念 异常的体系结构 异常的分类 1.编译时异常 2.运行时异常 异常的处理 防御式编程 LBYL EAFP 异常的抛出 异常的捕获 异常声明throws try-catch捕获并处理 finally 异常的处理流程 异常的概念和体系结构 异常的概念 在Java中…

一篇文章教会你如何降低代码的冗余度——探索指针数组,数组指针,函数指针,函数指针数组,回调函数的奥妙

前言&#xff1a;人们总说指针是c语言的灵魂&#xff0c;是因为指针的使用技巧是“千姿百态”的&#xff0c;程序员可以通过指针来直接访问内存&#xff0c;这就赋予了它功能的多样性以及更多意想不到的编程技巧与方式&#xff0c;在本篇文章中&#xff0c;笔者就给大家带来指针…

嵌入式Linux驱动开发(LCD屏幕专题)(二)

一、结合APP分析LCD驱动程序 1、open app: open("/dev/fb0", ...) 主设备号: 29, 次设备号: 0 -------------------------------------------------------------- kernel:fb_open // fbmem.cstruct fb_info *info;info get_fb_info(fbidx);if (info->fbop…