扩展方法可以使我们为现有的添加方法,现有的类可是是CLB的也可以是自己定义的。
注意事项:
   通过this修饰方法第一个参数
   方法声明在静态类中
   方法通过对象调用
重要注意事项:
   扩展方法和类中方法同名,扩展方法将永远不会被调用
   扩展类型如果修改,扩展方法可能失效

下面我们讲一个扩展silverlight中RichTextBox的例子,在实际的开发中我们可能需要对RichTextBox取值或者设置值,在silverlight中并没有提供这个方法
实例如下:

建一个RichTextBox的扩展类RTBExtension:

代码

using System.Windows.Controls;
using System.Windows.Documents;

namespace ExtensionRichTextBox
{
/// <summary>
/// RTB扩展取值和设值方法
/// </summary>
public static class RTBExtension
{
/// <summary>
/// 取RTB值
/// </summary>
/// <param name="?"></param>
/// <returns></returns>
public static string GetRTBValue(this RichTextBox rtb)
{
string Text = string.Empty;
for (int i = 0; i < rtb.Blocks.Count; i++)
{
Paragraph p = (Paragraph)rtb.Blocks[i];
for (int j = 0; j < p.Inlines.Count; j++)
{
Run r = (Run)p.Inlines[j];
Text += r.Text;
}
}
return Text;
}

public static void SetRTBValue(this RichTextBox rtb, string data)
{
Paragraph p = new Paragraph();
Run r = new Run();
r.Text = data;
p.Inlines.Add(r);
rtb.Blocks.Clear();
rtb.Blocks.Add(p);
}

}
}

接下里我们在界面上拖一个RichtextBox TextBox 和两个Button,来测试这两个扩展方法

代码

public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
}

/// <summary>
/// 设置值
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, RoutedEventArgs e)
{
RTBExtension.SetRTBValue(this.richTextBox1, this.txtBlock1.Text);
}
/// <summary>
/// 取值
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button2_Click(object sender, RoutedEventArgs e)
{
this.txtBlock1.Text = RTBExtension.GetRTBValue(this.richTextBox1);
}
}

运行的效果:

从Textbox中取值设置给RichtextBox

从RichtextBox中取值设置给Textbox

转载于:https://www.cnblogs.com/Clivia/archive/2010/11/27/silverlight12.html

C#3.0新特性 扩展方法相关推荐

  1. 大数据技术之_11_HBase学习_03_HBase 实战之谷粒微博(练习API) + 扩展知识(布隆过滤器+HBase2.0 新特性)

    大数据技术之_11_HBase学习_03 第8章 HBase 实战之谷粒微博 8.1 需求分析 8.2 代码实现 第9章 扩展知识 9.1 HBase 在商业项目中的能力 9.2 布隆过滤器 9.3 ...

  2. C# 7.0 新特性:本地方法

    C# 7.0:本地方法 VS 2017 的 C# 7.0 中引入了本地方法,本地方法是一种语法糖,允许我们在方法内定义本地方法.更加类似于函数式语言,但是,本质上还是基于面向对象实现的. 1. 本地方 ...

  3. android studio viewo,android studio 3.6.0 绑定视图新特性的方法

    Android studio 3.6.0 绑定视图使用方法 1.确保你的 build gradle 最低为3.6.0 dependencies { classpath 'com.android.too ...

  4. [转]C# 2.0新特性与C# 3.5新特性

    C# 2.0新特性与C# 3.5新特性 一.C# 2.0 新特性: 1.泛型List<MyObject> obj_list=new List(); obj_list.Add(new MyO ...

  5. C#6.0,C#7.0新特性

    C#6.0,C#7.0新特性 C#6.0新特性 Auto-Property enhancements(自动属性增强) Read-only auto-properties (真正的只读属性) Auto- ...

  6. WCF4.0新特性体验(6):路由服务Routing Service(下)

    紧接前文WCF4.0新特性体验(5):路由服务Routing Service(上).今天我们介绍WCF4.0消息路由的实现机制,然后会讲解路由服务的实现过程. [4]WCF与路由服务: 其实在介绍WC ...

  7. 【收藏】C# 2.03.0新特性总结

    c#2.0新特性 范型 我们知道通用的数据结构可以采用object存储任何数据类型.使用object问题是: 显示的强制转带来的代码复杂性 换装箱拆箱的性能损失(为什么有性能损失?因为涉及动态内存分配 ...

  8. 精进不休 .NET 4.0 (4) - C# 4.0 新特性之命名参数和可选参数

    [索引页] [源码下载] 精进不休 .NET 4.0 (4) - C# 4.0 新特性之命名参数和可选参数, 动态绑定(dynamic), 泛型协变和逆变, CountdownEvent, Barri ...

  9. [WCF 4.0新特性] 标准终结点与无(.SVC)文件服务激活

    今天介绍WCF 4.0的另外两个新特性:标准终结点(Standard Endpoint)和无(.SVC)文件服务激活(File-Less Activation).前者实现了针对典型通信场景对终结点的定 ...

最新文章

  1. php post可重复提交了,如何防止 POST 数据重复提交!
  2. Windows键盘驱动结构与消息机制--转
  3. 解决修改SQL SERVER 默认1433端口 访问出错的问题;
  4. 乱码 设置界面_和平精英:压轴更新后BUG频出,设置界面崩盘,界面全白变乱码...
  5. C#使用SQLite数据库的代码示例
  6. Anaconda和conda——关于python的数据科学开发环境,数据科学必备的十大Python库
  7. 微信支付v3 php 源码,求微信支付wxpayv3服务端完整代码
  8. 鱼群算法matlab代码,人工鱼群算法MATLAB实现
  9. ARM与x86之1--Wintel帝国
  10. 计算机在中医临床学的应用,中医临床学术论文(2)
  11. Veu表达与v-model
  12. NEXMO 发送国际短信,遇到的问题
  13. 华为鸿蒙harmonyos-面向全场,华为鸿蒙 OS 下月发布?别做梦了……
  14. 爆款小程序是怎么炼成的
  15. arcgis javascript Measurement的使用
  16. Mysql基础入门篇(二)
  17. Legacy与UEFI
  18. GNS3安装ASA 8.42防火墙 ASA5520,包含asa842-vmlinuz 和asa842-initrd免费下载
  19. 计算机专业大专还学语数外吗,大学越学越秃的5大专业:计算机排第五,数学落榜,榜首实至名归...
  20. 【调剂】浙江理工大学2021年硕士研究生招生调剂公告

热门文章

  1. jquery怎么判断不同的字显示不同的颜色_不知道怎么封装代码?看看这几种设计模式吧!...
  2. unity android so热更,惊鸿哥的港湾
  3. mysql plus baomidou_com.baomidou.mybatisplus.core.mapper 不存在
  4. 电脑ping服务器显示传输失败,Win10系统ping时出现传输失败常见故障解决办法
  5. php代码怎么看错在哪里,PHP代码不知道哪里错了。
  6. PowerDesigner基础学习
  7. java对图像的解压_java – 将图像解压缩到blobstore中
  8. ubuntu安装minisat_minisat 安装指南
  9. 域外计算机访问域内共享,域外用户如何拥有让其他电脑加域或退域的权限
  10. python互斥锁原理_Linux 互斥锁的实现原理(pthread_mutex_t)