C#3.0新特性 扩展方法
扩展方法可以使我们为现有的添加方法,现有的类可是是CLB的也可以是自己定义的。
注意事项:
通过this修饰方法第一个参数
方法声明在静态类中
方法通过对象调用
重要注意事项:
扩展方法和类中方法同名,扩展方法将永远不会被调用
扩展类型如果修改,扩展方法可能失效
下面我们讲一个扩展silverlight中RichTextBox的例子,在实际的开发中我们可能需要对RichTextBox取值或者设置值,在silverlight中并没有提供这个方法
实例如下:
建一个RichTextBox的扩展类RTBExtension:
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 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新特性 扩展方法相关推荐
- 大数据技术之_11_HBase学习_03_HBase 实战之谷粒微博(练习API) + 扩展知识(布隆过滤器+HBase2.0 新特性)
大数据技术之_11_HBase学习_03 第8章 HBase 实战之谷粒微博 8.1 需求分析 8.2 代码实现 第9章 扩展知识 9.1 HBase 在商业项目中的能力 9.2 布隆过滤器 9.3 ...
- C# 7.0 新特性:本地方法
C# 7.0:本地方法 VS 2017 的 C# 7.0 中引入了本地方法,本地方法是一种语法糖,允许我们在方法内定义本地方法.更加类似于函数式语言,但是,本质上还是基于面向对象实现的. 1. 本地方 ...
- android studio viewo,android studio 3.6.0 绑定视图新特性的方法
Android studio 3.6.0 绑定视图使用方法 1.确保你的 build gradle 最低为3.6.0 dependencies { classpath 'com.android.too ...
- [转]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 ...
- C#6.0,C#7.0新特性
C#6.0,C#7.0新特性 C#6.0新特性 Auto-Property enhancements(自动属性增强) Read-only auto-properties (真正的只读属性) Auto- ...
- WCF4.0新特性体验(6):路由服务Routing Service(下)
紧接前文WCF4.0新特性体验(5):路由服务Routing Service(上).今天我们介绍WCF4.0消息路由的实现机制,然后会讲解路由服务的实现过程. [4]WCF与路由服务: 其实在介绍WC ...
- 【收藏】C# 2.03.0新特性总结
c#2.0新特性 范型 我们知道通用的数据结构可以采用object存储任何数据类型.使用object问题是: 显示的强制转带来的代码复杂性 换装箱拆箱的性能损失(为什么有性能损失?因为涉及动态内存分配 ...
- 精进不休 .NET 4.0 (4) - C# 4.0 新特性之命名参数和可选参数
[索引页] [源码下载] 精进不休 .NET 4.0 (4) - C# 4.0 新特性之命名参数和可选参数, 动态绑定(dynamic), 泛型协变和逆变, CountdownEvent, Barri ...
- [WCF 4.0新特性] 标准终结点与无(.SVC)文件服务激活
今天介绍WCF 4.0的另外两个新特性:标准终结点(Standard Endpoint)和无(.SVC)文件服务激活(File-Less Activation).前者实现了针对典型通信场景对终结点的定 ...
最新文章
- mysql+实例夯住的监控_Nagios 里面监控MySQL 监控事务夯住(RUNNING)报警通知
- DNS与Active Directory在两台服务器分别布署
- 41 Ansible安装
- Agent admitted failure to sign using the key
- contentType类型,ajax内容类型
- 关于C++编写com和调用com组件的小例子以及个人所犯错误见解
- Linux系统的应用软件流程图绘制软件yEd
- html中b和strong的区别,i和em的区别
- Ubuntu20.04设置网络共享文件夹
- 一日精通python编程_爱上Python 一日精通Python编程 [Learn Python in One Day and Learn it Well ]...
- 最简单的P2P加密聊天软件开发准备
- vue项目中 一行文本 文字 根据关键字 改变颜色 改变展示颜色
- 博奥智源汇总关于校车管理系统开发功能列表-转自博奥智源
- 一款基于springboot开发的经典后台管理系统
- Cisco 配置 GRE隧道
- 运动学习与控制-学习笔记(三)——运动控制理论
- 致敬贝叶斯以及自己对贝叶斯的一些见解
- django 热启动_uwsgi 热部署 热启动 热更新
- 修改计算机 注册到 用户,电脑修改注册表导致开机时电脑显示“无法登陆到你的账户”的问题解决方案...
- 计算机学校排名中学,美国高中计算机专业名校:美高STEM排名TOP20
热门文章
- java 上传图片后没法立马显示出来_SpringMVC多个文件上传及上传后立即显示图片功能...
- linux php 中文文件名乱码,linux文件名乱码
- python可视化工具bokeh_浅谈python可视化包Bokeh
- php短路逻辑,JS利用短路原理简写if语句
- html css三类选择器,css三类选择器 用法 引用
- 蓝魔i11pro运行linux,不仅仅是变大了 蓝魔i11pro新玩法
- linux postgre服务名,linux中service配置之postgresql
- 插入排序算法 java_排序算法实现-插入排序(Java版本)
- ppt课堂流程图_4个超实用的PPT制作技巧:开学提升备课质量,资深老师都在用
- matlab7.x答案,MATLAB习题及参考答案