zoukankan      html  css  js  c++  java
  • 核心编程

    一.代码协定

    1.前提条件

    Contract.Requires(bool)

    .EndContractBlock();用于兼容旧if判断代码

    2.后置条件

    .Ensures(bool)

    .Result<type>() 返回值

    .OldValue<type>(x)返回参数的原始值

    .ValueAtResult(out x)返回out参数的值

    3.集合检查

    .Exists()任一项满足条件

    .ForAll()所有项满足条件

    4.恒等式条件

    .Invariant(bool)

    5.接口绑定协定

    [ContractClass(typeof(协定实现类))]  接口特性

    [ContractClassFor(typeof(接口))] 协定实现类特性

    [pure] 常态操作特性

    二、并行操作

    1.任务

    Task t1=new Task(Action<object>);创建新任务

    Task t3=new Task(Func<object, result>, data);创建可返回结果的任务

    //TaskCreationOptions 指定任务类型

    t1.Start();开始运行

    Task t2 = t1.ContinueWith(Action<Task>);后继任务,参数为上个任务

    //TaskCreationOptions 指定启动时机

    t3.Start()

    t3.Wait()等待任务完成

    t3.Result 提取结果

    2.多任务

    Parallel.For(0,9,Action<int>); 从0~9重复执行同一个方法

    Parallel.For(0,9,Action<int,ParallelLoopState>); ParallelLoopState控制迭代流程

    Parallel.For(0,9,Func<init>,Func<int, ParallelLoopState, init, init2>,Action<init2>); Func<init>初始化任务,第二个Func是每次迭代执行的函数,任务返回值交由Action处理。(任务数可能少于迭代次数,也就是系统会重用某一任务,而开始和结尾只有创建任务和结束任务才会调用,函数之间传递的信息需要特别留意)

    Parallel.ForEach(source<t>, Action<t>) 同步迭代数据源

    Parallel.ForEach(source<t>,Action<t,ParallelLoopState, int>) 带迭代次数和控制参数的版本

    3.终止任务

    CancellationToken 控制参数

    CancellationTokenSource cts=new CancellationTokenSource(); //创建控制参数

    cts.Token.Register(Action); //注册取消后执行的方法

    cts.Cancel(bool);//取消任务

    cts.Token //即CancellationToken

    取消任务会产生OperationCanceledException异常。

    cts.Token.IsCancellationRequested  是否取消任务

    cts.Token.ThrowIfCancellationRequested(); 取消状态下抛出异常

    4.共享资源管理

    lock(obj) 锁定对象, 或者在该对象内部进行锁定处理可将该对象定义为线程安全对象。

    多个锁定对象锁定顺序不一致,可能导致死锁。(个人看法:要么保持锁定顺序一致,要么不要锁定多个关联对象,方法一,改造成线程安全对象,并且每个对象不在解锁前访问另一个线程安全对象;方法二,用单一的锁定对象包裹关联对象,让它们成为一个整体(因为保持顺序一致较难,或可按字典排序))。

    lock(this) 危险语句,因为对象可能在对象外部被锁定。应该用对象的私有成员做锁定标志。

    当读取和写入应该连续(比如避免将旧值存会已经改变了的变量中),这种有事务性要求的操作中,应该锁住整一个过程,而不是分别锁住读写两部分(一个事务一个锁的原则设计方法,比如提供 read() 和 readAndWrite()界面,而不是read 和 write界面)。

    SpinLock 是结构版本的Monitor,性能更优。

    5.计时器

    System.Threading.Timer(Action<object>, obj, TimeSpan, TimeSpan)  按指定间隔调用方法

    Thread.Sleep(int); 休眠指定毫秒

    三、角色和授权

    四.XAML

    1.依赖类型

    class MyDependencyObject: DependencyObject //特定基类

    { public int Value{get{return (int)GetValue(ValueProperty);} //基类成员GetValue

    set{SetValue(ValueProperty,value);}} //调用基类成员SetValue

    public static readonly DependecyProperty ValueProperty =

    DependecyProperty.Register(“Value”,typeof(int),typeof(MyDependencyObject), //注册依赖属性

    new PropertyMetadata(初值, 值变更后回调方法, 值变更前回调方法));}

    UIElement 支持冒泡和隧道事件的基类

    DependecyProperty.RegisterAttached() 附加属性注册

    2.标记扩展

    “{StaticResource ID}”  

    等价于

    <StaticResourceExtension ResourceKey=”ID” />

    MarkupExtension 标记扩展的基类

    [MarkupExtensionReturnType(typeof(string))]  标记扩展返回类型特性

    public override object ProvideValue(IServiceProvider serviceProvider) 重载的返回函数

    serviceProvider.GetService(typeof(IProvideValueTarget)) as IProvideValueTarget; 调用的查询服务

  • 相关阅读:
    python之接口与抽象类
    python之内置函数与匿名函数
    python之常用模块
    python之块包导入
    python之协程函数、递归、二分法
    Ios证书申请流程
    VUE + vue-cli + webpack 创建新项目(2)
    VUE + vue-cli + webpack 创建新项目
    布局的几种方式(静态布局、自适应布局、流式布局、响应式布局、弹性布局)
    浅谈rem布局和vm布局
  • 原文地址:https://www.cnblogs.com/Nobel/p/4071872.html
Copyright © 2011-2022 走看看