C# 特性

作者: 清水包哟 | 来源:发表于2018-10-24 18:42 被阅读1次

泛型

lambda表达式

匿名函数

委托

winfrom界面委托

在对控件进行操作的时候,可以通过判断当前线程是否为控件所在线程外的线程。如果是,则调用Invoke。

private void AlertMessage(string message)
{
    if(InvokeRequired)
    {
        BeginInvoke(new Action<string>(AlertMessage), message);
    }
    else
    {
        MessageBox.Show(message);
    }
}

也可以直接通过控件类直接调用Invoke方法,底层代码会自己判断线程并将请求委托。

ConsoleTbx.Invoke(new Action<string>(AlertMessage),message);
private void AlertMessage(string message)
{
    MessageBox.Show(message);
}

wpf界面委托

可以通过控件进行委托

TextBox1.Dispatcher.BeginInvoke(new Action<bool>(DisableCameraButton), enable)

线程间委托

不同类不同线程

不同类之间不同线程使用事件,事件是一种特殊的委托。通过在一个类中将一个方法订阅给另一个类,在另声明了事件的类中调用。

需要注意的是,既然已经将方法委托出去,方法内代码所属线程必然是调用方所属线程,而不是方法实现所在类的线程中。

public class A
{
    public A()
    {
        B b = new B(); 
 
        b.OnEventTrigger += EventMethod;     
    }   
     
    // 自己实现的方法  
    // 其中参数e为方法调用时传递的DataArgs类型的对象 ,通过这个对象访问他的成员变量 
    private void EventMethod(object sender, DataArgs e)
    {
         ...// 方法实现 
    } 
} 
 
public class B
{
    public event EventHandler<DataArgs>  OnEventTrigger; 

    public void test()     
    { 
        if(OnEventTrigger != null) 
        {  
            DataArgs d = new DataArgs("Hello World!"); 
            OnEventTrigger(d);
        }  
    }  
} 

// 自己编写的事件所传递的参数类,继承与EventArgs类  
public class DataArgs : EventArgs
{
    public string Message {get; private set;}
     
    public DataArgs(string message) 
    {
         this.Message = message; 
    }  
}

同一个类不同线程

当在同一个类中,可以使用更为简单的委托来实现

public clas A
{ 
    private delegate void TestInvoke(string message);

       
 
}

匿名委托

匿名委托俗称闭包,就是将一段代码和其中涉及到的数据一起打包委托调用。

总所周知,在js中,闭包是最常见的一种匿名回调。

在C#中,我们称之为匿名委托。直接将方法体与数据委托调用,就是将这二者打包发送过去,让其调用。打包的过程就称之为闭包。

闭包时特别涉及到数据访问问题,方法体对父方法体内的数据拥有访问权限,能够在方法体中直接使用,回调时的数据是闭包时的数据复制。

相关文章

  • C#语言特性发展史

    C#语言特性发展史 Intro 本文主要总结介绍C# 每个版本带来的不同的语言特性。 C#,读作C Sharp,是...

  • C#特性(Attribute)-现学现用

    前言 想要灵性的使用C#反射机制,特性(Attribute)的使用是必不可少的。 C# 特性(Attribute)...

  • C#枚举类型常用扩展方法(三)

    C#获取枚举值特性(Display、Description、自定义特性) 一、Display特性 调用如下: 二、...

  • 目录 - C#

    总目录 C# 第01局:泛型 C# 第02局:反射 C# 第03局:特性 C# 第04局:委托 C# 第05局:事...

  • C# 语言历史版本特性(C# 1.0到C# 8.0汇总)

    C# 1.0 特性Classes:面向对象特性,支持类类型Structs:结构Interfaces:接口Event...

  • C# 特性

    泛型 无 lambda表达式 无 匿名函数 无 委托 winfrom界面委托 在对控件进行操作的时候,可以通过判断...

  • c#特性

    c#特性: 特性(Attribute)是用于在运行时传递程序中的各种元素(比如类,方法,结构,枚举,组件等)的行为...

  • Unity 之如何写出强壮的代码

    【反射】 Unity C#基础之 反射反射,程序员的快乐 Unity C#基础之 特性,一个灵活的小工具 【多线程...

  • 异步编程(二):async/await模式之基本操作

    在C#语言中,Async/AWait特性可以创建并使用异步方法。该特性由三个部分组成: 调用方法(calling ...

  • MVC(C#特性)

    使用自动实现的属性 prop----(单击tab两次)--->public int MyProperty { ge...

网友评论

    本文标题:C# 特性

    本文链接:https://www.haomeiwen.com/subject/azuxtqtx.html