Tag: 结构

为什么.NET值types是密封的?

从C#结构中inheritance是不可能的。 这不是很明显,为什么这是: 显然你不能有一个从值typesinheritance的引用types; 这是行不通的 从原始types(Int32,Double,Char等)中inheritance它是不合理的。 你需要能够使用派生实例调用基类(非虚函数)。 你可以从派生的结构体转换到基体,因为它们会重叠相同的内存。 我猜从基础铸造派生将无法正常工作,因为你不知道在运行时派生的结构types。 我可以看到你不能在你的类层次结构中实现虚拟方法,因为值types不能有虚拟成员 我不知道这是CLR的技术限制,还是C#编译器阻止你做的事情? 编辑:值types不能有虚拟方法,我意识到这种限制排除了大多数情况下,你想使用inheritance。 尽pipe如此,这仍然留下了inheritance。 想象一下带有Colour字段的Shape结构体:我可以编写接受任何从Shape派生的结构体的代码,并访问它的Colour字段,即使我永远不会写一个虚拟的Shape.Draw方法。 我可以想象一个会被非密封值types破坏的场景。 值types应该正确实现Equals和GetHashCode ; 即使System.Object上的这两个方法是虚拟的,它们也会在值types上被非虚拟调用。 即使值types不封闭,写一个从另一个派生的结构的人也不能编写他们自己的这两个方法的实现,并希望正确地调用它们。 我应该指出,我并不是说我应该能够从自己的代码中inheritance结构。 但是我想要做的是猜测为什么这个特定的代码被.NET禁止。 编辑2:我刚刚发现了这个非常类似的问题 ,答案是有效的,因为那么价值types的数组将不起作用。

Django的最佳结构脚本

什么是部署一个典型的Django项目最好的股票结构脚本? 面料看起来非常好,但似乎要求您从头开始编写自己的部署脚本。 来自Capistrano,我想从其他人已经testing过的更加开箱即用的东西开始,而不是从头开始编写一个。 理想情况下,我想要一个同步数据库,使用南进行迁移,备份网站和数据库,并可以回滚以前的部署。

static_cast和reinterpret_cast有什么区别?

可能重复: 什么时候应该使用static_cast,dynamic_cast和reinterpret_cast? 我在c ++中使用c函数,在c中作为voidtypesparameter passing的结构直接存储在相同的结构types中。 例如在C. void getdata(void *data){ Testitem *ti=data;//Testitem is of struct type. } 在c ++中做同样的事情我使用static_cast: void foo::getdata(void *data){ Testitem *ti = static_cast<Testitem*>(data); } 当我使用reinterpret_cast它做同样的工作,铸造结构 当我使用Testitem *it=(Testitem *)data; 这也是同样的事情。 但是如何利用三者来影响结构呢?

复制一个结构到另一个

我知道我可以通过成员复制结构成员,而不是我可以在结构上做一个memcpy ? 这样做是可取的吗? 在我的结构中,我有一个string也作为成员,我不得不复制到具有相同成员的另一个结构。 我怎么做?

C#静态类vs结构预定义的string

一个同事刚刚在C#中创build了以下结构(示例代码被简化了)。 他的目标是缩短其余代码中所有预定义string的符号。 public struct PredefinedStrings { public const string VeryLongName = "Very Long Name"; public const string AnotherVeryLongName = "Another Very Long Name"; public const string TheLastVeryLongName = "The Last Very Long Name"; } public static void MethodThatUsesTheNames() { Console.WriteLine(PredefinedStrings.VeryLongName); Console.WriteLine(PredefinedStrings.AnotherVeryLongName); Console.WriteLine(PredefinedStrings.TheLastVeryLongName); } 虽然它似乎为他工作正常,我不能停止想知道他是否应该使用静态类,而不是一个结构,或者如果有更好的方法来实现这一点。 什么是这样做的首选方法? 请解释为什么。

什么是最有效的方式来表示结构中的小值?

我经常发现自己必须代表一个由非常小的价值观组成的结构。 例如, Foo有4个值, a, b, c, d ,范围从0 to 3 。 通常我不在乎,但有时候,那些结构是 用于紧密的环路中; 他们的价值是读十亿次/秒,这是该计划的瓶颈; 整个程序由大量的数十亿美元组成; 在这种情况下,我发现自己很难决定如何有效地expressionFoo 。 我基本上有4个选项: struct Foo { int a; int b; int c; int d; }; struct Foo { char a; char b; char c; char d; }; struct Foo { char abcd; }; struct FourFoos { int abcd_abcd_abcd_abcd; }; 它们分别使用128,32,8,8比特,每个Foo从稀疏到密集。 […]

C:指向结构定义中的结构的指针

我怎样才能有一个指向这个结构定义中的下一个结构的指针: typedef struct A { int a; int b; A* next; } A; 这是我第一次写它,但它不起作用。

C#是'types检查结构奇怪的.NET 4.0 x86优化行为

更新:我已经提交了Microsoft Connect的错误报告 ,请投票! 更新2:微软已经将bug报告标记为已修复 由微软于18/08/2010在17:25发布 该错误将在未来版本的运行时中修复。 恐怕现在判断是否会在服务包或下一个主要版本中还为时过早。 由于升级到VS2010,我得到一些非常奇怪的行为与“is”关键字。 下面的程序(test.cs)在debugging模式(对于x86)编译时输出True,在(对于x86)优化编译时输出False。 编译x64或AnyCPU中的所有组合会给出预期结果,即True。 在.NET 3.5下编译的所有组合都会给出预期的结果,True。 我正在使用下面的batch file(runtest.bat)来编译和testing使用编译器.NET框架的各种组合的代码。 有没有人在.NET 4.0下看到过这种types的问题? 当运行runtests.bat时,其他人是否在计算机上看到和我一样的行为? @ $ @#$? 有没有解决这个问题? test.cs中 using System; public class Program { public static bool IsGuid(object item) { return item is Guid; } public static void Main() { Console.Write(IsGuid(Guid.NewGuid())); } } runtest.bat @echo off rem Usage: rem runtest — […]

在C#中初始化一个结构数组

我怎样才能尽可能清楚地初始化const / static结构数组? class SomeClass { struct MyStruct { public string label; public int id; }; const MyStruct[] MyArray = { {"a", 1} {"b", 5} {"q", 29} }; };

如何初始化结构?

我应该在我的任意结构中实现什么成员来进行以下任务: public struct MyStruct { String s; Int length; } MyStruct myStruct = new MyStruct { s = "Hello", length = 5 }; // Now, I want the following code to set the 's' to "Lol" and the // length to 3 (length of "Lol"). The second part should be done // automatically. myStruct = […]