我有一个Bar包含引用类型的私有字段的类Foo.我想Foo在一个公共财产中公开,但我不希望财产的消费者能够改变Foo......但是它应该在内部可以改变Bar,即我不能进入该领域readonly.
所以我想要的是:
private _Foo;
public Foo
{
get { return readonly _Foo; }
}
Run Code Online (Sandbox Code Playgroud)
......当然无效.我可以回复一个克隆Foo(假设它是IClonable),但这对消费者来说并不明显.我应该将属性的名称更改为FooCopy?? 它应该是一种GetCopyOfFoo方法吗?你认为最佳做法是什么?谢谢!
我有一个VS(2008)解决方案,由几个项目组成,而不是全部在同一名称空间中.构建解决方案时,顶级项目TopProject使用的所有dll 都将复制到TopProject\bin\debug文件夹中.但是,仅为某些其他项目复制相应的.pdb文件.这是一种痛苦,例如在使用NDepend时.
VS如何决定将哪些.pdb文件复制到更高级别的bin\debug文件夹中?我怎样才能让VS复制其他人呢?
编辑:
参考如下:所有dll都复制到一个中心位置,没有他们的pdbs.TopProject 只引用了这些复制的dll; 然而,dll本身显然知道他们的pdbs在哪里,并且(大多数)被正确地复制到调试文件夹.
我在课堂上ICollection<T>打电话foos,我想以只读方式公开(见这个问题).我看到界面定义了一个属性.IsReadOnly,这似乎是合适的......我的问题是:我如何让对于foos只读类的消费者明白?
.IsReadOnly在尝试未实现的方法之前,我不想依赖它们记住查询.Add().理想情况下,我想揭露foos的ReadOnlyCollection<T>,但它没有实现IList<T>.我应该foo通过一个名为,例如,GetReadOnlyFooCollection而不是通过属性公开的方法公开?如果是这样,这不会混淆那些期望的人ReadOnlyCollection<T>吗?
这是C#2.0,所以扩展方法ToList()不可用......
我有一个类Bar包含一个List<Foo>,既Foo和Bar实施了ISerializable.
反序列化a时Bar,List<Foo>最初填充(正确数量)nulls; 然后在退出Bar反序列化时,Foo调用每个反序列化的ctor,填充List<Foo>(正确反序列化)Foos.
为什么会这样?我无法在测试项目中复制它:无论我尝试过什么导致Foo反序列化的ctors 在ctor 之前被调用Bar.这实际上是我想要的行为,因为我需要填充列表以便为反序列化做一些初始化Bar!
任何人都知道什么可能导致Foos被反序列化这么晚?谢谢!
我遇到了一个常见的问题.当我有一个可能由几个不同的类订阅的事件时,这些类之一抛出的异常将终止回调链; 因为我不知道回调执行顺序的先验,这可能导致某些类的不可预测的状态更改而不是其他类.
在圣经中(CLR通过C#,我使用的是C#2.0)有一个关于使用MulticastDelegate.GetInvocationList来解决这个问题的简短段落,但仅此而已.所以我的问题是:处理这个问题的最佳方法是什么?我MulticastDelegate.GetInvocationList每次举办活动都必须使用吗?或者我是否需要在某种回滚机制中包含可能作为委托链的一部分调用的所有方法?与简单的事件/委托模型相比,为什么所有这些选项都如此复杂?在C#中如此易于使用?我怎样才能使用简单的方法而不会以损坏的状态结束?
谢谢!
我的类包含一个Dictionary<T, S> dict,我想公开一个ReadOnlyCollection<T>键.如何在不复制Dictionary<T, S>.KeyCollection dict.Keys数组然后将数组暴露为数组的情况下执行此操作ReadOnlyCollection?
我希望它 ReadOnlyCollection是一个合适的包装器,即.反映基础字典中的变化,据我所知,将集合复制到数组将不会这样做(以及看似效率低下 - 我实际上并不想要新的集合,只是为了公开基础的密钥集合.. ).任何想法将不胜感激!
编辑:我正在使用C#2.0,因此没有.ToList(轻松)可用的扩展方法.
我的理解是,如果S是一个子类的T,那么List<S>是不是一个孩子List<T>.精细.但是接口有不同的范例:如果是Foo实现IFoo,那么为什么List<Foo>不是(一个例子)List<IFoo>?
因为可能没有实际的类IFoo,这是否意味着我在暴露a时总是必须强制转换列表中的每个元素List<IFoo>?或者这只是糟糕的设计,我必须定义自己的集合类ListOfIFoos才能与它们一起工作?对我来说似乎都不合理......
考虑到我正在尝试编程接口,那么暴露这样一个列表的最佳方式是什么?我目前正倾向于实际存储我的List<Foo>内部作为List<IFoo>.
使用NDepend,我如何找到特定方法或属性的所有,直接和间接使用?
特别是,我需要找到通过使用路径某处的接口发生的用法.谢谢!
我有一个应用程序,它由几个不同的程序集组成,其中一个程序集包含类所遵循的各种接口,以及类通过程序集边界进行通信.有几个类触发事件,有几个对这些事件感兴趣.
我的问题如下:实现某种中央EventConsolidator是一种好的做法吗?这将是高度耦合的,因为它需要知道抛出事件的每个类(或至少是接口),并且事件的每个消费者都需要具有对EventConsolidator的引用才能订阅.
目前我的情况是A级知道B级(但不是C级),B级知道C级等等.然后,如果C触发事件B需要将其拾起并触发自己的事件以便A响应.这些类型的链可能会变得很长,并且B可能只对事件感兴趣才能传递它.我不希望A知道C,因为这会破坏封装.
在这种情况下,有什么好的做法?集中事件,或者咧嘴笑,并在每个中间阶段定义事件?或者做出决定的标准是什么?谢谢!
编辑:这是另一个问题基本上是同一件事.
我有一个winforms RichTextBox包含许多行文本(例如2 MB文本文件),并希望以编程方式更改指定行的格式,例如突出显示它们.
我该如何处理线条而不是字符?RichTextBox甚至是对这类事情的最佳控制,还是有另一种选择?我已经尝试过Infragistics UltraFormattedTextEditor,但显示文本的速度至少要低几个数量级,因此对于我的较长文件没有任何好处.
谢谢!
c# ×9
c#-2.0 ×2
collections ×2
generics ×2
architecture ×1
controls ×1
cqlinq ×1
delegates ×1
dictionary ×1
events ×1
exception ×1
interface ×1
list ×1
ndepend ×1
pdb-files ×1
properties ×1
readonly ×1
string ×1
winforms ×1