您的位置:首页 > 编程语言 > C#

第十二课通知界面变更接口——C#计算器编程教学

2016-05-04 15:56 337 查看
前面说了,这个接口微软的FrameWork库里的名称叫INotifyPropertyChanged,在System.ComponentModel名称空间里。前面也说过了,CaclString属性实现了这个接口,你们是否举一反三,Result属性也实现了这个接口呢?没有?那你的学习能力有问题。(哈)

凡是要和界面打交道的公有属性必须实现这个接口,这是我说过的界面和程序编写分离的编程模式的要求。

这里列出CaclString的定义代码,(前面不是列出来了吗?是的,但这还不是真实的代码哦)

public string CaclString
{
get
{
return caclString;
}
set
{
if (caclString != value)
{
caclString = value;
isRun = false;
string digist = "1234567890.";
while (caclString != "" && !digist.Contains(caclString.First()))
{
caclString = caclString.Remove(0, 1);
}
noStringAdded = caclString == "";
RaisePropertyChanged("CaclString");
}
}
}
这个set访问器代码是什么意思呢?

可不要忘了,本程序支持键盘输入!这是为了它而编写的。

在这里你看到了isRun属性值的设置时机。想想看,有输入时当然还没有运行计算。

这里有一个问题,如何绕开set访问器代码?这涉及到后面部分功能键的代码。

答案是:不要CaclString=XXX,而是caclString=XXX,然后跟一句:

RaisePropertyChanged("CaclString");

所以要理解这一句代码的功能含义。它告诉界面或者调用它的对象,本属性值有变化,请重新调用它(的新值)。再看看它返回的是什么?不就是caclString么!

Cacl类接口定义还有一个公有属性,叫HaveMemory;我是如下定义的:

public bool HaveMemory
{
get { return memoryString != null; }
}
它是只读属性,没有在定义里实现通知界面变更接口,实现这个接口不能在get访问器中定义。所以每当memoryString值有变化,后面必须跟一句:

RaisePropertyChanged("HaveMemory");
当然,你也可以这样定义memoryString:

private string MemoryString
{
get
{
return memoryString;
}

set
{
memoryString = value;
RaisePropertyChanged("HaveMemory");
}
}
private string memoryString;
以后不用每次编写那一句。

第十二课结语。灵活运用接口功能,编程思路广阔清晰,这是一种境界,这是编程能力的目标。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: