使用默认引用对象关系访问C#中属性的默认值
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了使用默认引用对象关系访问C#中属性的默认值,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1611字,纯文字阅读大概需要3分钟。
内容图文
![使用默认引用对象关系访问C#中属性的默认值](/upload/InfoBanner/zyjiaocheng/785/77fd22b80a65446cac7db2bba4376041.jpg)
我在层次结构中有一个对象,其值可以默认为父对象的值.两个对象属于同一类型.
例如:如果Score属性为double.NaN,则应从Parent属性指向的对象中检索Score值,但仅在设置Parent时才会检索(Parent!= null).
我的问题是,我如何可靠地以通用的方式实现这样的模型?我有2个选项,但也许还有更多?
选项1:更改每个属性getter和setter以检查正在设置或获取的属性是否具有默认值,如果是,请尝试从父级读取它
private double score = double.NaN;
public double Score
{
get { return (score == double.NaN && Parent != null) ? Parent.Score : score; }
set { score = (Parent != null && Parent.Score == value) ? double.NaN : value; }
}
优点:
>分别对所有属性值进行实时原子更新
>显式比较默认值
缺点:
>每个属性getter和setter都需要手动实现,这可能容易出错
>每次获取和设置都会影响性能
选项2:实现对象加载和保存的默认值
void AfterLoad()
{
if(Parent != null)
{
if(score == double.NaN)
{
score = Parent.Score;
}
// (...)
}
}
void BeforeSave()
{
if(Parent != null)
{
if(score == Parent.Score)
{
score = double.NaN;
}
// (...)
}
}
void AfterSave()
{
AfterLoad();
}
优点:
>父关系仅在加载(一次)和保存(两次)时使用,这样可以提高性能
缺点:
>在任何时候,父对象更改都不会影响子属性
>在更改父对象之前和之后,需要处理子级(在父级更改后回退到新的默认值)
>原子性可能会受到影响 – 在保存对象期间,任何其他线程都无法访问它
我确信许多人在实现对象“样式”模型时有类似的dillema.我正在寻找一个干净且有效的解决方案,它也可以将子对象和父对象的集合连接在一起(使用CompositeCollection?).
解决方法:
您可以使用WPF样式的方法,其中属性值不存储在字段中,而是存储在基类的字典中.
这样所有属性都会是这样的
double Prop {
get{ return (double)GetValue("Prop"); }
set{ SetValue("Prop",value); }
}
如果没有为当前类设置,GetValue将检查所有父项以查找默认值.
内容总结
以上是互联网集市为您收集整理的使用默认引用对象关系访问C#中属性的默认值全部内容,希望文章能够帮你解决使用默认引用对象关系访问C#中属性的默认值所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。