Tag: C#的

我如何使用reflection来调用一个通用的方法?

当编译时不知道types参数,而是在运行时dynamic地获得types参数时,调用generics方法的最好方法是什么? 考虑下面的示例代码 – 在Example()方法中,使用存储在myTypevariables中的Type来调用GenericMethod<T>()的最简洁的方法是什么? public class Sample { public void Example(string typeName) { Type myType = FindType(typeName); // What goes here to call GenericMethod<T>()? GenericMethod<myType>(); // This doesn't work // What changes to call StaticMethod<T>()? Sample.StaticMethod<myType>(); // This also doesn't work } public void GenericMethod<T>() { // … } public static void StaticMethod<T>() { //… […]

为什么不是一个结构的sizeof等于每个成员的sizeof的总和?

为什么'sizeof'操作符返回的结构体积比结构体的总尺寸要大?

如何使用extern在源文件之间共享variables?

我知道C中的全局variables有时候有extern关键字。 什么是externvariables? 什么是宣言? 它的范围是什么? 这与在源文件中共享variables有关,但是它是如何精确地工作的呢? 我在哪里使用extern ?

为什么在写入用“char * s”初始化而不是“char s ”的string时会出现分段错误?

以下代码在第2行上收到seg故障: char *str = "string"; str[0] = 'z'; printf("%s", str); 虽然这很好地工作: char str[] = "string"; str[0] = 'z'; printf("%s", str); 经MSVC和GCCtesting。

为什么gets函数非常危险,不应该使用?

当我尝试编译使用gets函数的C代码时,我得到一个警告: warning: the gets function is dangerous and should not be used. 我记得这与堆栈保护和安全有关,但我不确定为什么。 有人可以帮我解决这个警告,并解释为什么有这样的警告? 如果gets是如此“危险”,那么为什么我们不能删除它?

解决由于类之间的循环依赖造成的错误

我经常发现自己处于一个C ++项目中由于一些糟糕的devise决策(由别人:)而导致多个编译/链接器错误),导致不同头文件中的C ++类之间循环依赖的情况(也可能发生在同一个文件中) 。 但幸运的是(?)对于我下次再次发生这个问题时,这种情况并没有经常发生。 所以,为了今后方便回忆起来,我将会发表一个代表性的问题和解决scheme。 更好的解决scheme当然是受欢迎的。 Ah class B; class A { int _val; B *_b; public: A(int val) :_val(val) { } void SetB(B *b) { _b = b; _b->Print(); // COMPILER ERROR: C2027: use of undefined type 'B' } void Print() { cout<<"Type:A val="<<_val<<endl; } }; Bh #include "Ah" class B { double […]

什么是IndexOutOfRangeException / ArgumentOutOfRangeException,如何解决?

我有一些代码,当它执行时,它抛出一个IndexOutOfRangeException ,说, 指数数组的边界之外。 这是什么意思,我能做些什么呢? 根据所使用的类别,它也可以是ArgumentOutOfRangeException mscorlib.dll中发生types“System.ArgumentOutOfRangeException”的exception,但未在用户代码中处理其他信息:索引超出范围。 必须是非负的,并且小于集合的大小。

这是什么奇怪的冒号成员(“:”)在构造函数中的语法?

最近我见过一个例子如下: #include <iostream> class Foo { public: int bar; Foo(int num): bar(num) {}; }; int main(void) { std::cout << Foo(42).bar << std::endl; return 0; } 这是什么奇怪的: bar(num)是什么意思? 它似乎似乎初始化成员variables,但我从来没有见过这种语法。 它看起来像一个函数/构造函数调用,但为int ? 对我来说没有意义。 也许有人可以启发我。 顺便说一下,还有没有其他的深奥的语言function,你永远不会find一个普通的C + +书?

什么是arrays衰减?

什么是arrays的衰减? 与数组指针有任何关系吗?

C ++中的指针variables和引用variables之间有什么区别?

我知道引用是语法糖,所以代码更容易读写。 但有什么区别? 下面的答案和链接摘要: 指针可以重新分配任意次数,而绑定后不能重新引用引用。 指针可以指向任何地方( NULL ),而引用总是指向一个对象。 你不能像引用指针那样使用引用的地址。 没有“引用算术”(但是你可以把一个引用指向的对象的地址作为指针并且在&obj + 5做指针运算)。 澄清一个误解: C ++标准非常小心,以避免编译器如何实现引用,但每个C ++编译器都将引用实现为指针。 也就是说,一个声明如: int &ri = i; 如果没有完全优化 ,则分配与指针相同的存储量,并将i的地址放入该存储中。 所以,一个指针和一个引用都占用相同数量的内存。 作为基本规则, 在函数参数和返回types中使用引用来定义有用和自我logging的接口。 使用指针来实现algorithm和数据结构。 有趣的阅​​读: 我最喜欢的C ++ FAQ lite 。 参考与指针 。 参考文献介绍 。 引用和常量 。