我们知道,在C#中,结构是按值传递的,而不是通过引用传递的.所以,如果我有一个包含以下数据成员的结构:
private struct MessageBox
{
// data members
private DateTime dm_DateTimeStamp; // a struct type
private TimeSpan dm_TimeSpanInterval; // also a struct
private ulong dm_MessageID; // System.Int64 type, struct
private String dm_strMessage; // an object (hence a reference is stored here)
// more methods, properties, etc ...
}
Run Code Online (Sandbox Code Playgroud)
因此,当MessageBox作为参数传递时,堆栈上会产生COPY,对吗?这对数据成员的复制方式意味着什么?前两个是结构类型,因此副本应该由DateTime和TimeSpan组成.第三种类型是基元,因此它也被复制.但是dm_strMessage呢,它是对象的引用?当它被复制时,会创建对同一个String的另一个引用,对吧?对象本身驻留在堆中,并且不被复制(堆上只有一个实例.)所以现在我们必须引用String类型的同一对象.如果从不同的线程访问这两个引用,则可以想象String对象可能会被同时从两个不同的方向修改而被破坏.MSDN文档说System.String是线程安全的.这是否意味着String类有一个内置机制来防止对象在这里描述的情况类型中被破坏?我试图弄清楚我的MessageBox结构是否有任何潜在的缺陷/缺陷是结构与类.感谢您的任何意见.
Source.Energy.
当用Git创建一个新的存储库时,添加.git子目录的路径是否必须是SAME的路径,作为项目文件所在的路径(即由Git管理的文件)?提出相同问题的另一种方法是:如果我想创建一个新的Git存储库,存储库路径是否总是必须与相应的项目路径一致,或者我可以在另一个位置创建存储库目录,然后将Git POINT指向项目路径?例如,如果我的项目在"F:\ My Projects\Mother Goose\Gerber \"中,我可以在"F:\ My Repositories\Pointer Path\Gerber \"中创建一个Git存储库吗?然后告诉Git查看要添加到存储库的文件的"\ My Projects\Mother Goose\Gerber \"?