C#3.0新特性 扩展方法

      扩展方法可以使我们为现有的添加方法,现有的类可是是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

posted @ 2010-11-27 23:27  星空有我  阅读(1473)  评论(7编辑  收藏  举报