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