返回顶部
首页 > 资讯 > 精选 >C#网络编程中常用特性有哪些
  • 891
分享到

C#网络编程中常用特性有哪些

2023-06-29 07:06:21 891人浏览 八月长安
摘要

这篇文章给大家分享的是有关C#网络编程中常用特性有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。特性一:委托委托是C#语言中特有的概念,相当于C/C++中的函数指针,与C/c++中函数指针的不同之处是:委托是

这篇文章给大家分享的是有关C#网络编程中常用特性有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

特性一:委托

委托是C#语言中特有的概念,相当于C/C++中的函数指针,与C/c++中函数指针的不同之处是:委托是面向对象的、类型安全的和保险的,是引用类型。因此,对委托的使用要

“先定义、后声明,接着实例化、然后作为参数传递给方法,最后才能使用”。

1、定义委托使用关键字delegate:

delegate  void SomeDelegate(type1 para1,......typen paran);

2、声明委托:

SomeDelegate  d;

3、实例化委托:

d=new SomeDelegate(obj.InstanceMethod);

其中obj是对象,InstanceMethod是它的实例方法。

4、作为参数传递给方法

someMethod(d);

5、最后在此方法的实现代码中使用委托

private  void  someMethod(SomeDelegate  someDelegate){   .....   //使用委托  someDelegate(arg1,arg2,....,argn);  ...... }

通过委托SomeDelegate实现对方法InstanceMethod的调用,调用还必须有一个前提条件:方法InstanceMethod有参数且和定义SomeDelegate的参数一致,并且返回类型相同(本例中为void)。方法InstanceMethod的定义:

private  void  InstanceMethod(type1 para1,type2 para2,......,typen paran){   //方法体  .....}

委托的实例化中的参数既可以是实例方法,也可以是静态方法。

使用委托实现“文字抄写员”的小程序,界面如下:

在下方文本框中编辑文字,勾选“书写到”组框中的“文本区1”和(或)“文本区2”复选框后单击“提交”按钮,程序会自动将文本框中的文字“抄写”到对应的用户勾选的文本区中去。

C#网络编程中常用特性有哪些

代码实现如下:

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.windows.FORMs;namespace DelegateDemo{    public partial class FrmMain : Form    {        public FrmMain()        {            InitializeComponent();        }        //1、定义委托        private delegate void WriteToTextBox(string strTxt);        //2、声明委托        private WriteToTextBox writeToTextBox;        /// <summary>        /// 提交        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void btn_OK_Click(object sender, EventArgs e)        {            if (chbOne.Checked)            {                gbJobOne.Text = "运行中......";                gbJobOne.Refresh();                txtJobOne.Clear();                //3、实例化委托                writeToTextBox = new WriteToTextBox(WriteTextBox1);                //4、将委托作为方法的参数进行传递                WriteText(writeToTextBox);                gbJobOne.Text = "任务1完成";            }            if (chbTwo.Checked)            {                gbJobTwo.Text = "运行中......";                gbJobTwo.Refresh();                txtJobTwo.Clear();                //3、实例化委托                writeToTextBox = new WriteToTextBox(WriteTextBox2);                //4、将委托作为方法的参数进行传递                WriteText(writeToTextBox);                gbJobTwo.Text = "任务2完成";            }        }        private void WriteText(WriteToTextBox writeMethod)        {            string strData = this.txt_Input.Text;            writeMethod(strData);        }        private void WriteTextBox1(string strTxt)        {            this.txtJobOne.Text = strTxt;        }        private void WriteTextBox2(string strTxt)        {            this.txtJobTwo.Text = strTxt;        }        /// <summary>        /// 窗体加载事件        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void FrmMain_Load(object sender, EventArgs e)        {            //设置文本框获取焦点            this.ActiveControl = this.txt_Input;            //this.txt_Input.Focus();        }    }}

特性2:多线程

线程的具体介绍请参考博文:https://www.yisu.com/article/238731.htm

使用多线程实现上一节的程序,代码如下:

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;using System.Threading;//引入多线程的命名空间namespace DelegateDemo{    public partial class FrmMain : Form    {        public FrmMain()        {            InitializeComponent();        }        //1、定义委托        private delegate void WriteToTextBox(string strTxt);        //2、声明委托        private WriteToTextBox writeToTextBox;        /// <summary>        /// 提交        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void btn_OK_Click(object sender, EventArgs e)        {           //创建线程1            Thread thread1 = new Thread(new ThreadStart(ExecuteTsk1));            //启动线程1            thread1.Start();            //创建线程2            Thread thread2 = new Thread(new ThreadStart(ExecuteTsk2));            //启动线程2            thread2.Start();        }        private void ExecuteTsk1()        {            if (chbOne.Checked)            {                gbJobOne.Text = "运行中......";                gbJobOne.Refresh();                txtJobOne.Clear();                //3、实例化委托                writeToTextBox = new WriteToTextBox(WriteTextBox1);                //4、将委托作为方法的参数进行传递                WriteText(writeToTextBox);                gbJobOne.Text = "任务1完成";            }        }        private void ExecuteTsk2()        {            if (chbTwo.Checked)            {                gbJobTwo.Text = "运行中......";                gbJobTwo.Refresh();                txtJobTwo.Clear();                //3、实例化委托                writeToTextBox = new WriteToTextBox(WriteTextBox2);                //4、将委托作为方法的参数进行传递                WriteText(writeToTextBox);                gbJobTwo.Text = "任务2完成";            }        }        private void WriteText(WriteToTextBox writeMethod)        {            string strData = this.txt_Input.Text;            writeMethod(strData);        }        private void WriteTextBox1(string strTxt)        {            this.txtJobOne.Text = strTxt;        }        private void WriteTextBox2(string strTxt)        {            this.txtJobTwo.Text = strTxt;        }        /// <summary>        /// 窗体加载事件        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void FrmMain_Load(object sender, EventArgs e)        {            //设置文本框获取焦点            this.ActiveControl = this.txt_Input;            //允许跨线程调用            Control.CheckForIllegalCrossThreadCalls = false;        }    }}

特性3:C#方法回调

C#回调的具体介绍请参照博文:Https://www.yisu.com/article/238731.htm#_label3

使用委托、多线程和C#的方法回调机制实现上一节的程序,代码如下:

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;using System.Threading;//引入多线程的命名空间namespace DelegateDemo{    public partial class FrmMain : Form    {        public FrmMain()        {            InitializeComponent();        }        //1、定义委托        private delegate void WriteToTextBox(string strTxt);        //2、声明委托        private WriteToTextBox writeToTextBox;        //定义并声明操作文本区1的回调        private delegate void WriteTxtJobOneCallBack(string strValue);        WriteTxtJobOneCallBack writeTxtJobOneCallBack;        //定义并声明操作文本区2的回调        private delegate void WriteTxtJobTwoCallBack(string strValue);        WriteTxtJobOneCallBack writeTxtJobTwoCallBack;        //定义并声明操作"任务1"分组框的回调        private delegate void ShowGroupOneCallBack(string strValue);        ShowGroupOneCallBack showGroupOneCallBack;        //定义并声明操作"任务2"分组框的回调        private delegate void ShowGroupTwoCallBack(string strValue);        ShowGroupOneCallBack showGroupTwoCallBack;        /// <summary>        /// 提交        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void btn_OK_Click(object sender, EventArgs e)        {           //创建线程1            Thread thread1 = new Thread(new ThreadStart(ExecuteTsk1));            //启动线程1            thread1.Start();            //创建线程2            Thread thread2 = new Thread(new ThreadStart(ExecuteTsk2));            //启动线程2            thread2.Start();        }        private void ExecuteTsk1()        {            if (chbOne.Checked)            {                //3、实例化委托                writeToTextBox = new WriteToTextBox(WriteTextBox1);                //4、将委托作为方法的参数进行传递                WriteText(writeToTextBox);                //使用回调                this.gbJobOne.Invoke(showGroupOneCallBack, "任务1");            }        }        private void ExecuteTsk2()        {            if (chbTwo.Checked)            {                //3、实例化委托                writeToTextBox = new WriteToTextBox(WriteTextBox2);                //4、将委托作为方法的参数进行传递                WriteText(writeToTextBox);                //使用回调                this.gbJobTwo.Invoke(showGroupTwoCallBack, "任务2");            }        }        /// <summary>        /// 执行自定义委托        /// </summary>        /// <param name="writeMethod"></param>        private void WriteText(WriteToTextBox writeMethod)        {            string strData = this.txt_Input.Text;            writeMethod(strData);        }        /// <summary>        /// 给文本区1赋值        /// </summary>        /// <param name="strTxt"></param>        private void WriteTextBox1(string strTxt)        {            //使用回调            this.txtJobOne.Invoke(writeTxtJobOneCallBack, strTxt);        }        /// <summary>        /// 给文本区2赋值        /// </summary>        /// <param name="strTxt"></param>        private void WriteTextBox2(string strTxt)        {            //使用回调            this.txtJobTwo.Invoke(writeTxtJobTwoCallBack, strTxt);        }        /// <summary>        /// 窗体加载事件        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void FrmMain_Load(object sender, EventArgs e)        {            //设置文本框获取焦点            this.ActiveControl = this.txt_Input;            //实例化回调            writeTxtJobOneCallBack = new WriteTxtJobOneCallBack(WriteToTextJobOne);            writeTxtJobTwoCallBack = new WriteTxtJobOneCallBack(WriteToTextJobTwo);            showGroupOneCallBack = new ShowGroupOneCallBack(ShowGroupOne);            showGroupTwoCallBack = new ShowGroupOneCallBack(ShowGroupTwo);        }        /// <summary>        /// 操作文本区1的回调要执行的方法        /// </summary>        /// <param name="strValue"></param>        private void WriteToTextJobOne(string strValue)        {            this.txtJobOne.Text = strValue;        }        /// <summary>        /// 操作文本区2的回调要执行的方法        /// </summary>        /// <param name="strValue"></param>        private void WriteToTextJobTwo(string strValue)        {            this.txtJobTwo.Text = strValue;        }        /// <summary>        /// 操作"任务1"分组框的回调要执行的方法        /// </summary>        /// <param name="strValue"></param>        private void ShowGroupOne(string strValue)        {            this.gbJobOne.Text = strValue;        }        /// <summary>        /// 操作"任务2"分组框的回调要执行的方法        /// </summary>        /// <param name="strValue"></param>        private void ShowGroupTwo(string strValue)        {            this.gbJobTwo.Text = strValue;        }    }}

感谢各位的阅读!关于“C#网络编程中常用特性有哪些”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: C#网络编程中常用特性有哪些

本文链接: https://lsjlt.com/news/323402.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C#网络编程中常用特性有哪些
    这篇文章给大家分享的是有关C#网络编程中常用特性有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。特性一:委托委托是C#语言中特有的概念,相当于C/C++中的函数指针,与C/C++中函数指针的不同之处是:委托是...
    99+
    2023-06-29
  • C#网络编程中常用特性介绍
    特性一:委托 委托是C#语言中特有的概念,相当于C/C++中的函数指针,与C/C++中函数指针的不同之处是:委托是面向对象的、类型安全的和保险的,是引用类型。因此,对委托的使用要 &...
    99+
    2024-04-02
  • C++11常用的特性有哪些
    今天小编给大家分享一下C++11常用的特性有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。C++ 是一个拥有用户群体相当...
    99+
    2023-06-27
  • 常见的unix网络编程问题有哪些
    常见的UNIX网络编程问题包括:1. 连接问题:如何建立和维护连接,如何处理中断的连接等。2. 并发问题:如何处理多个客户端同时连接...
    99+
    2023-09-21
    unix
  • C++11、C++14、C++17、C++20常用新特性有哪些
    这篇文章主要介绍“C++11、C++14、C++17、C++20常用新特性有哪些”,在日常操作中,相信很多人在C++11、C++14、C++17、C++20常用新特性有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对...
    99+
    2023-07-05
  • C++ 函数的函数式编程特性有哪些?
    c++++ 支持函数式编程特性,包括:纯函数:使用 const 修饰符声明,不修改输入或依赖外部状态。不可变性:使用 const 关键字声明变量,无法修改其值。惰性求值:使用 std::...
    99+
    2024-04-11
    c++ 函数式编程
  • C#网络编程入门基础知识有哪些
    这篇文章主要介绍“C#网络编程入门基础知识有哪些”,在日常操作中,相信很多人在C#网络编程入门基础知识有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C#网络编程入门基础知识有哪些”的疑惑有所帮助!接下来...
    99+
    2023-06-17
  • c#的特性有哪些
    本篇文章给大家分享的是有关c#的特性有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1. ObsoleteAttributeObsoleteAttribute 适用于除组件...
    99+
    2023-06-15
  • Linux中常用的网络命令有哪些
    这篇“Linux中常用的网络命令有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Linux中常用的网络命令有哪些”文章吧...
    99+
    2023-06-27
  • RHEL7中常用的网络命令有哪些
    这篇文章主要介绍了RHEL7中常用的网络命令有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。ping检查网络连通性ping 常常用来测试与目的主机的连通性。可以ping通...
    99+
    2023-06-27
  • JavaScript常用网页特效有哪些
    小编给大家分享一下JavaScript常用网页特效有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1 元素偏移量offset系列1.1 offset概述offset含义:offset的含义是偏移量,使用offset的相...
    99+
    2023-06-25
  • C++14有哪些新特性
    这篇文章主要讲解了“C++14有哪些新特性”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++14有哪些新特性”吧!「函数返回值类型推导」C++14对函数返回类型推导规则做了优化,先看一段代...
    99+
    2023-06-16
  • C# 10的特性有哪些
    小编给大家分享一下C# 10的特性有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!常量的内插字符串C# 10 允许使用在常量字符串初始化中使用插值, 如下co...
    99+
    2023-06-22
  • C++的test特性有哪些
    这篇文章主要介绍“C++的test特性有哪些”,在日常操作中,相信很多人在C++的test特性有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++的test特性有哪些”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-17
  • C++语言有哪些特性
    本篇内容主要讲解“C++语言有哪些特性”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++语言有哪些特性”吧!Visual C++调试技术检查代码直到头晕眼花也没有发现错误,一运行程序就死机,只...
    99+
    2023-06-17
  • C#3.5新特性有哪些
    这篇文章主要介绍了C#3.5新特性有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一.C#3.5新特性-var关键字关键字var,是否让您想起了JavaScript中的定...
    99+
    2023-06-18
  • C#10新特性有哪些
    本篇内容主要讲解“C#10新特性有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#10新特性有哪些”吧!1、Natural types for lambdasC# 10 可以更好做类型推断...
    99+
    2023-06-25
  • Java编程中影响性能的特点有哪些
    这篇文章主要讲解了“Java编程中影响性能的特点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java编程中影响性能的特点有哪些”吧!1.尽量使用final修饰符。带有final修饰符...
    99+
    2023-06-17
  • dos中网管常用的网络命令有哪些
    这篇文章给大家分享的是有关dos中网管常用的网络命令有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。如果你玩过路由器的话,就知道路由器里面那些很好玩的命令缩写。  例如,"sh ...
    99+
    2023-06-09
  • 对C++11特性支持的C编译器有哪些
    今天就跟大家聊聊有关对C++11特性支持的C编译器有哪些,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。GCC的下个版本是4.8,以及Clang即将到来的版本是3.3 。如果你使用Vi...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作