C#学习:初始类与名称空间

news2024/12/23 9:07:57

本节内容:

1.初始类(class)与名称空间(namespace)

这个定义过于复杂。 

类(class)构成程序的主体。具体的解释很复杂,要资深开发人才能看的懂,我们先记住这句话。

什么是名称空间呢?比如我们有了1000个类,我们把1000个类搁在一起,你想使用其中一个类时,你会发现找起来很麻烦,那这就相当于你有1000本书,你把1000本书堆在屋子里,没有分门别类,那你想再去找一本书时那就比较麻烦了。名称空间就是把类用良好的结构组织在一起。起这样的一个作用。

比如图书馆,它把书分好大类A,B,C......开头,大类里面又有小类,比如a1,a2.....你想找一本书,在这个索引单上看各自的类就可以准确找到位置,非常多书的情况下,有些书是重名的,名字是一样的,但是是不同的学科,所以名称空间可以有效的避免同名类的冲突。

我们看上一篇博客写的代码:

program的类是我们自己写的,这个类就代表了我们的程序,我们C#语言是完全面向对象的一种语言,用这个语言编程时,你的程序本身就是一个类。C语言是没有类的,程序入口直接就是int main,没有 归在那个类里面。C#是完全面向对象的,所以说main入口也要包含在类里面。

Console 这个类不是我们写的,而是微软准备好的,我们拿来可以直接用,我们现在用的是类里边WriteLine这样的一个方法,这个方法可以帮我们把一个字符串写到我们的输出窗口上,WriteLine就是写一行。

我们接着认识名称空间,看上面namespace Console_Helloword,意思是我们编写的这个叫做program的这个类,放在了一个叫做hello world 这样的一个名称空间里面,这个名称空间默认跟我们创建的project的时候是一样的。

为什么这样做呢,意思是我自己的类我用自己定义的名称空间组织起来,当别人想用我们的类时,它也可以非常方便的从我的名称空间把这个类找出来。

using的意思是说把我的名称空间引用到我的程序里面来,下面我们做一个小实验。我们把上面的using全部删掉,

我们 的程序已经不认识Console,也没有自动提示,还有出错的波浪形,为什么这样呢?是因为我们现在的程序不知道这个Console到底来源于哪个名称空间,刚刚前面有using的时候,相当于告诉程序,如果我要写一个类的时候,没有把这个类的名称空间是哪个标出来的时候。你就从我引用的这些名称空间里去检索一遍,看看哪个名称空间有这个类,如果有这个类的话,你就用这个名称空间里边的这个类就可以了,而现在我们所有的名称空间都全部删除了,所以说我这时再去敲这个console这个类时,我的程序或者我的video Stdio就不知道这个console来自哪个名称空间了,

而实际上,我是知道的,我的知识高数我这个console这个类,它是来源于一个叫做System这个名称空间,花括号就是名称空间的标记

这时我再敲Console的话,它是能认出这个类,类的 标记是一个小方块,一个树形结构,意思是说这个类和类之间是有继承关系的

重新变为水蓝色说明它认出来了system 这个名称空间里边的这个console类,

此时运行一下:

结果跟我们之前写的是一样对的, 

我们再写一行,同样继续打印Good morning

通过这个例子,我们也发现一个问题,我每次想用这个console这个类的时候,那我必须前面加上它的名称空间的名字system.写多了的时候,我们会觉得很累,所以有没有 让程序简化呢,我写一行console,他就知道是从System这来的呢?当然可以,

所以知道引用名称空间的重要性了吧,所以软件就已经把我们常用的5个名称空间之间引用进来了,避免了我们手动去把它引用进来了。

我们介绍一个小技巧,上面是我们知道console这个类是System这个名称空间,如果说写一个console这个类,我不知道它是来自哪一个名称空间,下面介绍两种方法。

1.通过文档来知道, 

怎么通过文档来知道呢?

我们可以看到这个名称空间里边有非常多非常多特别重要的类,你想这个名称空间名字叫做system,它代表操作系统,与操作系统打交道的一些重要的类都在这个名称空间里边,那么我们未来编程,也会频繁地使用到这个名称空间里边的类,

当然这个system这个名称空间还有很多子名称空间,具体的去帮你完成一些跟操作系统打交道的一些详细的这个任务。

但是我们会发现一个问题,你点开Console的时候,,这里边有很多Console的类 ,而且都在System这个名称空间里边,有时候你会蒙,到底我去选哪一个呢,下面我们介绍一个比较简单的方法,

点击带电灯泡的,这个叫智能标记,快捷键  Ctrl+. 

会出现下面的选项, 第二个选项用它的全限定名,点一下他给你标记System,说明他很智能,它猜出来你的Console这个类是在System名称空间里边的那个console类。

如果你点using System,他会把using System加在我们程序的开头。

那是不是我们把所有名称空间都引用进来,会不会更好呢,这样的话我敲什么类他都能认出来,

其实不是这个样子的,我们的名称空间是以树形的结构来组织我们的类,让类分门别类,我们之前也说过了,类像一本书,有的书是可以重名的,所以有的类可以是同一个名字,但是他又不属于同一个类别,我们是通过名称空间把这些书能够分隔开,如果你把所有的名称空间都引用进来,书的书名一旦冲突了,就不知道是哪一个名称空间,我们举个例子

我们敲Path这个类,它是来自全限名为System.Windows.shapes这个名称空间, 你通过这个名称空间,你可以猜出来,它是系统里边有个叫做windows这个名称空间,就是给windows编程的这样一个名称空间,shape是形状,形状里面有一个叫path的,我们知道,我们的画板可以画多边形,path就是用来画多边形的,

但是我们还有一个System.IO.Path,这个path是我们文件的路径,比如我们平时想要去访问文件,硬盘里边的文件:比如C:\window\System32\mytest.txt这个也是path,这是文件的路径,与我们刚刚那个多边形的path是完全不一样的,而我们也都知道,我们编程时,要把我们图形程序的图形保存到硬盘的某个地方去,这个时候我们既要用画多边形的path类,也会用到存文件路径的path类,

此时出现了报错,程序发现有两个叫path类,你分别把他们的名称空间引用进来了,我到底用谁呢?

所以这个时候你不得不重新的去考虑使用全限定名,

实际上,我们名称空间之所以用它,就是为了同名的类不冲突,现在如果把它都引进来,这些类就冲突了,失去了他的作用。 

2.剖析Hello,World 程序

类与名称空间放在哪个地方呢?换句话说,如果我们想看一本书,如果你知道他的名称空间,可是图书馆没有,你看得到吗?答案是看不到。

所以类和名称空间是放在一个叫做类库的这个东西里边。

类库就是我们这个类和名称空间的物理基础。如果你没有这个类库的话,即使你知道这个名称空间与类,也没法使用它们,

类库的引用

  • 类库的引用是使用这个名称空间的物理基础
  • dll  ( dynamic link library)动态链接库

我们举个例子

创建一个wpf程序,写入一个Button ,根据提示,说明程序认识到了这个类,提示指出来了它的名称空间,也说明了它引用了一个类库,下图打开的窗口叫做对象浏览器。

确实,我们在类库里面找到了button这个类 

这是VS给我们引用的类库

如果我们自己想去引用一个类库怎么办,下面我们来展示一下这样的一个例子。

日常生活中对类库的引用就两种方式。一种方式是对编译好的dll直接引用,这种引用也叫黑盒引用,因为我们这个dll的源代码,还有一种方式我们有这个类库的源代码,然后我们对源代码进行引用,源代码放在项目里面,也叫项目引用,也叫白盒引用, 

1.DLL引用(黑盒引用)

黑盒引用有问题,如果代码里面有错的话,我们是无法修改这个错误的,我只能告诉编写这个类库的人, 

2.项目引用(白盒引用)

我们搜索一下form类,看到上图所示信息。回到Vs

可以看到,这是一个命令行程序,不需要窗口,因此我们发现并没有form 的程序集

下面我们把窗口的程序集加进去。这样我们就可以用窗口类了。

这时我们发现,这个类库被引用进来了, 

Form有哪些功能,我们去查MSDN文档, 可以看到很多属性,很多方法,说明这个类很强大。

我们可以找到一个叫Showdialog的方法,可以看看他是怎么用的 

 写入一下程序

 可以看到出现了窗体。

 3.使用NuGet对dll的引用

NuGet它是用来解决这个比较复杂的依赖关系的,程序与类库是有一定的依赖关系的,底层的库你没有引用的话,你想用上层的库,你是引用不了的,

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

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

相关文章

视频评论ID提取工具|视频关键词评论批量采集软件

视频评论ID提取工具:批量抓取视频评论 视频评论ID提取工具是一款功能强大的软件,可以帮助您批量抓取视频视频下的评论信息。通过输入关键词和评论监控词,即可进行评论的抓取,并提供评论昵称、评论日期、评论内容、命中关键词以及所…

【Qt】:对话框(一)

对话框 一.基本的对话框二.自定义对话框三.通过图形化界面自定义对话框四.关于对话框mode 对话框是GUI程序中不可或缺的组成部分。一些不适合在主窗口实现的功能组件可以设置在对话框中。对话框通常是一个顶层窗口,出现在程序最上层,用于实现短期任务或者…

腾讯云人脸服务开通详解:快速部署,畅享智能体验

请注意,在使用人脸识别服务时,需要确保遵守相关的法律法规和政策规定,保护用户的合法权益,并依法收集、使用、存储用户信息。此外,腾讯云每个月会提供一定次数的人脸识别调用机会,对于一般的小系统登录来说…

[StartingPoint][Tier2]Included

LXD https://www.hackingarticles.in/lxd-privilege-escalation/ Task 1 What service is running on the target machine over UDP? (目标机器上通过UDP运行的服务是什么?) $ nmap -sU 10.129.232.86 -p 69 tftp Task 2 What class o…

C++:构造函数、析构函数、拷贝构造函数

hello,各位小伙伴,本篇文章跟大家一起学习《C:构造函数、析构函数、拷贝构造函数》,感谢大家对我上一篇的支持,如有什么问题,还请多多指教 ! 如果本篇文章对你有帮助,还请各位点点赞…

Flutter中间镂空的二维码扫描控件

1、UI效果图&#xff1a; 2、中间镂空UI&#xff1a; class CenterTransparentMask extends CustomClipper<Path> {final double? width;CenterTransparentMask({this.width});overridePath getClip(Size size) {final path Path()..addRect(Rect.fromLTWH(0, 0, size…

K8s 部署 elasticsearch-7.14.0 集群 及 kibana 客户端

一、K8s 部署 elasticsearch-7.14.0 集群 安装规划 组件replicas类型es3StatefulSetkibana1Deployment 使用 k8s 版本为&#xff1a;v1.18.0 。 本次使用 OpenEBS 来作为存储引擎&#xff0c;OpenEBS 是一个开源的、可扩展的存储平台&#xff0c;它提供了一种简单的方式来创…

外贸公司应该怎么选择企业邮箱?哪个企业邮箱最好?

外贸公司业务的特殊性需要他们频繁进行跨国的沟通交流&#xff0c;那么外贸公司应该如何选择适合的企业邮箱呢&#xff1f;首先&#xff0c;传输邮件的稳定安全是前提&#xff0c;另外由于沟通多是国外客户&#xff0c;邮件的翻译也成为外贸公司企业邮箱的刚需。小编今天就详细…

linux——Bash特性

bash是一个命令解释器&#xff0c;其支持命令行展开&#xff5b;&#xff5d;写法 alias是命令别称&#xff0c;即为命令等同于&#xff0c;使用unalias对应命令可以取消该别称 alias可以对命令进行更改

Docker+Uwsgi+Nginx部署Django项目保姆式教程

之前&#xff0c;我和大家分享了在docker中使用uwsgi部署django项目的教程。这次&#xff0c;为大家带来的是使用DockerUwsgiNginx部署Django项目。废话不多说&#xff0c;我们开干。 步骤1&#xff1a;使用命令创建一个django项目 我这里python版本使用的是3.9.x 首先&#…

HarmonyOS实战开发-自定义分享

介绍 自定义分享主要是发送方将文本&#xff0c;链接&#xff0c;图片三种类型分享给三方应用,同时能够在三方应用中展示。本示例使用数据请求 实现网络资源的获取&#xff0c;使用屏幕截屏 实现屏幕的截取&#xff0c;使用文件管理 实现对文件&#xff0c;文件目录的管理&…

【C++成长记】C++入门 | 类和对象(上) |面向过程和面向对象初步认识、类的引入、类的定义、类的访问限定符及封装

&#x1f40c;博主主页&#xff1a;&#x1f40c;​倔强的大蜗牛&#x1f40c;​ &#x1f4da;专栏分类&#xff1a;C❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 一、面向过程和面向对象初步认识 C语言是面向过程的&#xff0c;关注的是过程&#xff0c;分析出求解问题的步…

2011年认证杯SPSSPRO杯数学建模A题(第一阶段)客机水面迫降时的姿态全过程文档及程序

2011年认证杯SPSSPRO杯数学建模 A题 客机水面迫降时的姿态 原题再现&#xff1a; 2009 年 1 月 15 日下午&#xff08;美国东部时间&#xff09;&#xff0c;US Airways 所属第 1549 航班&#xff08;空中客车 A320 客机&#xff09;在起飞后不久在纽约哈德逊河紧急迫降。经及…

强化学习实践0

gym是目前强化学习最常用的工具之一&#xff0c;一直在迭代升级。2021年gym库不再更新&#xff0c;推出了gymnasium作为替代 1。 gymnasium与gym之间的主要不同在于reset和step的返回参数数目发生了变化&#xff0c;具体变化见版本变化。 gym目前并不支持python3.11版本…

基于ssm的大学生租房平台的设计与实现(java源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的大学生租房平台。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 大学生租房平台的设计与实现的主…

Vue3整合wangEditor(富文本编辑器框架) 以及提供存储渲染方案

目录 概述 Vue3整合wagnEditor 图片的上传 图片的删除 文章存储 文章渲染 概述 实现功能&#xff1a;管理端使用富文本编辑器编写文章内容&#xff0c;将编辑好的文章存入数据库或服务器中&#xff0c;前端应用读取存储的文章内容作展示。 本文章能提供 ①Vue3整合wangEdi…

C++ - 二叉搜索树的基本实现

目录 0. 引言 1. 二叉搜索树 1.1 定义 1.2 特点 2. 二叉搜索树的实现 2.1 基本框架 2.2 查找 2.3 插入 2.4 删除 2.4.1 右子树为空 2.4.2 左子树为空 2.4.3 左右都不为空 2.4.4 代码 0. 引言 在C语言数据结构中&#xff0c;我们已经基本了解过二叉树&#xff…

Golang 开发实战day10 - Maps

&#x1f3c6;个人专栏 &#x1f93a; leetcode &#x1f9d7; Leetcode Prime &#x1f3c7; Golang20天教程 &#x1f6b4;‍♂️ Java问题收集园地 &#x1f334; 成长感悟 欢迎大家观看&#xff0c;不执着于追求顶峰&#xff0c;只享受探索过程 Golang 教程10 - Maps 1. M…

WordPress网站上添加看板娘

续接上篇——基于LNMP部署wordpress-CSDN博客 目录 一.下载并解压 二.设置头文件 修改header.php 修改配置文件footer.php 三.将你设置的主题包上传到/usr/share/nginx/html/wp-content这个目录里 四.扩展——将看板娘修改到左侧 一.下载并解压 [rootaliyun ~]# wget htt…