我在今天工作的代码库中遇到了一个模式,最初看起来非常聪明,后来让我疯了,现在我想知道是否有办法拯救聪明的部分,同时尽量减少疯狂.
我们有一堆实现的对象IContractObject,以及一个如下所示的类InvariantChecker:
internal class InvariantChecker : IDisposable
{
private IContractObject obj;
public InvariantChecker(IContractObject obj)
{
this.obj = obj;
}
public void Dispose()
{
if (!obj.CheckInvariants())
{
throw new ContractViolatedException();
}
}
}
internal class Foo : IContractObject
{
private int DoWork()
{
using (new InvariantChecker(this))
{
// do some stuff
}
// when the Dispose() method is called here, we'll throw if the work we
// did invalidated our state somehow
}
}
Run Code Online (Sandbox Code Playgroud)
这用于提供状态一致性的相对无痛的运行时验证.我没有写这个,但它最初似乎是一个非常酷的主意.
但是,如果Foo.DoWork …
我目前正在查看日期和日期时间对象的msdn页面.我也打开了反射器,看起来日期和日期时间对象只是引用了日期结构.为什么我们有两个引用相同结构的对象?它们之间有什么区别?
我有一个表,其中一列source_id的值应为另一张表的主键,尽管它在哪张表中因记录而异。每个记录必须具有一个用于source_table指定源记录表的值,以及一个用于source_id指定源表中的行的值。
有什么方法可以利用数据库的外键约束和验证来完成此任务?还是我必须将验证逻辑移到应用程序层?或者,是否有另一种设计可以让我避免这个问题?
我无法让WinDbg .for命令工作.
我想转储一系列c ++结构.
?? gpTranData->mpApplCodes[0] 适用于单个条目,但我想循环使用其中的一个.
.for ($t0=0;$t0<(gpTranData->miApplCodeCount);$t0++){ ?? &gpTranData->mpApplCodes[$t0] }
Run Code Online (Sandbox Code Playgroud)
对我来说合乎逻辑但是我明白了
Numeric expression missing from '>miApplCodeCount);$t0++){ ?? &gpTranData->m_pApplCodes[$t0] }'
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
斯科特
有没有人知道差异查看器或比较程序可以做基于段落的差异?我的repos有大量的LaTeX文件格式化为80个字符宽的段落(便于用vim编辑).目前很难解释各种版本之间的差异,因为导致换行位置的任何编辑都会导致差异中出现很多虚假差异.
我有一个用大量香草char*指针定义的结构,但也是一个对象成员.当我尝试静态初始化这样的结构时,我得到编译器错误.
typedef struct
{
const char* pszA;
// ... snip ...
const char* pszZ;
SomeObject obj;
} example_struct;
// I only want to assign the first few members, the rest should be default
example_struct ex = { "a", "b" };
Run Code Online (Sandbox Code Playgroud)
SomeObject有一个没有参数的公共默认构造函数,所以我不认为这会是一个问题.但是当我尝试编译它(使用VS)时,我收到以下错误:
error C2248: 'SomeObject::SomeObject' : cannot access private member declared in class 'SomeObject'
Run Code Online (Sandbox Code Playgroud)
知道为什么吗?
更新:这是SomeObject的定义
class SomeObject
{
void operator=(const SomeObject&);
SomeObject(const SomeObject&);
public:
SomeObject()
{
// etc
}
// members snipped
}
Run Code Online (Sandbox Code Playgroud) 我想要完成的是仅使用css创建一个渐变...我正在做的所有浏览器除了firefox 3.5之外...这里是代码:
#gradient {
color: #fff;
height:50px;
padding:0;
width:940px;
margin:0 auto;
background: -moz-linear-gradient(top, #CFE782 0%, #9BCB2A 2%,#5DA331 97%, #659635 100%);/* For Mozilla/Gecko (Firefox etc) */
}
Run Code Online (Sandbox Code Playgroud)
我省略了其他浏览器的背景......所以这是我的问题......
有谁知道为什么这不适用于Firefox 3.5和什么工作???
我想让多个对象通过私有字段共享一个引用,这样任何对象都可以分配给该字段,并且更新的字段将被共享该引用的其他对象看到。我最初希望做的是:
class SomeObject
{
private ref DataObject _data;
public SomeObject(ref DataObject data)
{
_data = ref data; // or something similar
}
public ChangeData(DataObject newData)
{
_data = data;
// at this point, *other* SomeObject instances that were
// created with the same reference should also have _data == newData
}
}
Run Code Online (Sandbox Code Playgroud)
但当然你不能这样使用ref:ref仅用于方法参数。静态字段不起作用,因为并非所有 SomeObject实例都应该引用同一个对象——而是应该在构造函数中设置有问题的对象。
显然我可以通过添加一个简单的包装类来解决这个问题。但是有更好的方法吗?SharedReference<T>我可以使用某种课程吗?
更新,因为大多数答案都误解了我的要求。我知道_data字段包含一个参考原来的DataObject。我想要的是另一个层次的间接性。我希望能够在一个实例中更改我指向的对象,并让使用相同引用创建的其他实例获取新值。正如更新后的代码示例所示,我想分配给_data,并_data在其他实例中有效地更改 的值。
我正在尝试将没有BOM的文件保存为wchar文本.在我的gVim窗口中,我看到:
T^@E^@X^@T^@H^@E^@R^@
Run Code Online (Sandbox Code Playgroud)
......这真烦人.我想将此文件编辑为常规文本文档,我希望vim以相同的格式保存它.我试着做:set encoding=utf-16(和如其他变化utf-16le,ucs-2以及ucs-2le,但文档视图不会改变.我怎样才能做到这一点?
在C中,以下指定的内容是做什么的?
if ("" == "")
{
printf("Empty strings are equal\n");
}
Run Code Online (Sandbox Code Playgroud)
我手头有一个编译器告诉我""确实等于"".但这种平等是否得到保障?
编辑:我完全理解指针比较和字符串比较在C中是如何工作的.我要问的是在C标准中为编译时常量空字符串指定了什么行为(如果有的话).我的信念是,字符串不能保证相等,但实际上通常是相同的,因为所有const空字符串都将被固定到同一地址.但我想知道是否有人可以提供明确的参考