类(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