C#学习总结(6)

2019-08-30 16:42

int t =b.getTemp(); int p =b.getPressure();

if(t >150|| t <80|| p <12|| p >15) {

remarks=\; }

OnBoilerEventLog(\);

OnBoilerEventLog(\+ t +\+ p); OnBoilerEventLog(\+ remarks); }

protectedvoidOnBoilerEventLog(string message) {

if(BoilerEventLog!=null) {

BoilerEventLog(message); } } }

// 该类保留写入日志文件的条款 classBoilerInfoLogger {

FileStream fs; StreamWritersw;

publicBoilerInfoLogger(string filename) {

fs=newFileStream(filename,FileMode.Append,FileAccess.Write); sw=newStreamWriter(fs); }

publicvoidLogger(string info) {

sw.WriteLine(info); }

publicvoidClose() {

sw.Close(); fs.Close(); } }

// 事件订阅器

publicclassRecordBoilerInfo {

staticvoidLogger(string info) {

Console.WriteLine(info); }//end of Logger staticvoidMain(string[]args) { BoilerInfoLoggerfilelog=newBoilerInfoLogger(\); DelegateBoilerEventboilerEvent=newDelegateBoilerEvent(); boilerEvent.BoilerEventLog+=new DelegateBoilerEvent.BoilerLogHandler(Logger); boilerEvent.BoilerEventLog+=new DelegateBoilerEvent.BoilerLogHandler(filelog.Logger); boilerEvent.LogProcess(); Console.ReadLine(); filelog.Close(); }//end of main }//end of RecordBoilerInfo } 当上面的代码被编译和执行时,它会产生下列结果: Logging info: Temperature 100 Pressure 12 Message: O. K

泛型(Generic): 允许您延迟编写类或方法中的编程元素的数据类型的规范,直到实际在程序中使用它的时候。换句话说,泛型允许您编写一个可以与任何数据类型一起工作的类或方法。

您可以通过数据类型的替代参数编写类或方法的规范。当编译器遇到类的构造函数或方法的函数调用时,它会生成代码来处理指定的数据类型。

泛型(Generic)的特性:使用泛型是一种增强程序功能的技术,具体表现在以下几个方面:

?

它有助于您最大限度地重用代码、保护类型的安全以及提高性能。

?

您可以创建泛型集合类。.NET 框架类库

在 System.Collections.Generic 命名空间中包含了一些新的泛型集合类。您可以使用这些泛型集合类来替代 System.Collections 中的集合类。

?

您可以创建自己的泛型接口、泛型类、泛型方法、泛型事件和泛型委托。

?

您可以对泛型类进行约束以访问特定数据类型的方法。 关于泛型数据类型中使用的类型的信息可在运行时通过使用反射获取。

?

泛型(Generic)委托:

可以通过类型参数定义泛型委托。例如: delegate T NumberChanger(T n); unsafe 修饰符: C# 允许在函数中使用指针变量。不安全代码或非托管代码是指使用了指针变量的代码块。指针 是值为另一个变量的地址的变量,即,内存位置的直接地址。就像其他变量或常量,您必须在使用指针存储其他变量地址之前声明指针。

关键字: fixed在 C# 中,数组名称和一个指向与数组数据具有相同数据类型的指针是不同的变量类型。例如,int *p 和int[] p 是不同的类型。您可以增加指针变量 p,因为它在内存中不是固定的,但是数组地址在内存中是固定的,所以您不能增加数组 p。

因此,如果您需要使用指针变量访问数组数据,可以像我们通常在 C 或 C++ 中所做的那样,使用 fixed 关键字来固定指针。

多线程:线程 被定义为程序的执行路径。每个线程都定义了一个独特的控制流。如果您的应用程序涉及到复杂的和耗时的操作,那么设置不同的线程执行路径往往是有益的,每个线程执行特定的工作。

线程是轻量级进程。一个使用线程的常见实例是现代操作系统中并行编程的实现。使用线程节省了 CPU 周期的浪费,同时提高了应用程序的效率。

到目前为止我们编写的程序是一个单线程作为应用程序的运行实例的单一的过程运行的。但是,这样子应用程序同时只能执行一个任务。为了同时执行多个任务,它可以被划分为更小的线程。

线程生命周期:开始于System.Threading.Thread类的对象被创建时,结束于线程被终止或完成执行时。 下面列出了线程生命周期中的各种状态:

*未启动状态:当线程实例被创建但 Start 方法未被调用时的状况。

*就绪状态:当线程准备好运行并等待 CPU 周期时的状况。 *不可运行状态:下面的几种情况下线程是不可运行的:

已经调用 Sleep 方法 已经调用 Wait 方法 通过 I/O 操作阻塞

*死亡状态:当线程已完成执行或已中止时的状况。 主线程:在 C# 中,System.Threading.Thread 类用于线程的工作。它允许创建并访问多线程应用程序中的单个线程。进程中第一个被执行的线程称为主线程。

当 C# 程序开始执行时,主线程自动创建。用 Thread 类创建的线程被主线程的子线程调用。您可以使用 Thread 类的 CurrentThread属性访问线程。 过程为:创建线程—>管理线程—>销毁线程

MODBUS协议 委托


C#学习总结(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:刑法博士、法学教授、检察官争辩的8个刑法问题

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: