C#引入了C语言中的一个独特属性,叫做代理,代理本质上是对另一个类中的函数的引用,可以分派和使用函数而无需要知道它来自哪一个类 ,只要函数满足同样的接口就可以.
下面这个例子很简单,功能就是实现一串字符大小写的转换
做法步骤:
新建一个代理类
//定义代理类需要命名空间using System.IO
public class DelegateClass
{
private delegate string ftxDelegate(string s);
public class Capital//转换大写的类
{
public string fixText(string s)
{
return s.ToUpper();
}
}
public class Lower//转换小写的类
{
public static string fixText(string s)
{
return s.ToLower();
}
}
public class DelegateClass
{
private delegate string ftxDelegate(string s);
public class Capital//转换大写的类
{
public string fixText(string s)
{
return s.ToUpper();
}
}
public class Lower//转换小写的类
{
public static string fixText(string s)
{
return s.ToLower();
}
}
public string GetString(bool UpperOrLower,string s)
{
ftxDelegate ftxText;
if(UpperOrLower)
{
ftxText=new ftxDelegate(Lower.fixText);
}
else
{
Capital cpitalclass=new Capital();
ftxText=new ftxDelegate(cpitalclass.fixText);
}
return ftxText(s);
}
{
ftxDelegate ftxText;
if(UpperOrLower)
{
ftxText=new ftxDelegate(Lower.fixText);
}
else
{
Capital cpitalclass=new Capital();
ftxText=new ftxDelegate(cpitalclass.fixText);
}
return ftxText(s);
}
}
radiobutton和转换按扭上的代码如下:
radiobutton和转换按扭上的代码如下:
private void opUpper_CheckedChanged(object sender, System.EventArgs e)
{
btConvert.Enabled=true;
{
btConvert.Enabled=true;
}
private void opLower_CheckedChanged(object sender, System.EventArgs e)
{
btConvert.Enabled=true;
{
btConvert.Enabled=true;
}
private void btConvert_Click(object sender, System.EventArgs e)
{
DelegateClass mydelegate=new DelegateClass();
string s=txWord.Text;
string ss=mydelegate.GetString(opLower.Checked,s);
lsWord.Items.Add(ss);
{
DelegateClass mydelegate=new DelegateClass();
string s=txWord.Text;
string ss=mydelegate.GetString(opLower.Checked,s);
lsWord.Items.Add(ss);
}