在C#中,为什么嵌套类必须实例化它的父类,在代码中引用其父类的非静态属性?
public class OuterClass
{
public int OuterClassProperty
{
get
{
return 1;
}
}
public class InnerClass
{
public int InnerClassProperty
{
get
{
/* synt
我对C#比较陌生,每次我开始处理C#项目时(我只在C#中处理接近成熟的项目),我想知道为什么没有内部类?
也许我不理解他们的目标。对我来说,内部类--至少是私有内部类--看起来很像Pascal /Modula 2/ Ada中的“内部过程”:它们允许将主类分解为更小的部分,以便于理解。
示例:下面是大多数时候看到的内容:
public class ClassA
{
public MethodA()
{
<some code>
myObjectClassB.DoSomething(); // ClassB is only used by ClassA
我有以下简单的测试:
class C<T>
{
public struct A
{
int x;
}
}
class Program
{
static unsafe void Main(string[] args)
{
IntPtr p = new IntPtr();
var a = (C<int>.A*)p.ToPointer();
}
}
代码生成错误CS0208:
Cannot take the address of, get the size of, or dec
有没有可能抛出bad_cast异常而不使任何层次结构或新类不同于C?main()不能编辑,唯一可以编辑的是C类。另外,我不能显式抛出bad_cast。
class C{
private:
...
public:
void f(){
...
}
};
int main () {
C c;
c.f();
}
提前感谢
我在web服务中有一个类,其中有一个嵌套类。
namespace MyWS
{
// web service class with web methods etc. here
public class SomeClass
{
// fields, properties, stuff etc.
public class NestedClass
{
// ...
}
}
}
当我尝试使用web服务进行web引用时,NestedClass不再是嵌套的,而是作为引用中的独立类(通
静态类型化和动态类型化在堆栈溢出(例如 )上被反复询问。
协商一致意见似乎是(引用上述链接的最高答复):
如果在编译时知道变量的类型,则会静态地输入语言。
一种动态的语言:
如果类型与运行时值相关联,而不是命名变量/字段/等,则该语言是动态键入的。
Perl似乎是静态类型的(或其他静态/动态类型的常见定义)。它有3种类型:标量、数组、散列(为了简单起见忽略引用之类的东西)。类型与变量一起声明:
my $x = 10; # declares a scalar variable named x
my @y = (1, 2, 3);
考虑一下Bloch的Builder pattern的逐字拷贝(对C#的语法进行了更改):
public class NutritionFacts
{
public int ServingSize { get; private set; }
public int Servings { get; private set; }
public int Calories { get; private set; }
...
public class Builder
{
private int ServingSize { get; set; }
private int
我遇到了一个我不理解的问题,我希望这里有人能提供一些见解。简化的代码如下所示(原始代码是一个自定义队列/队列迭代器实现):
class B
{
public:
B() {};
class C
{
public:
int get();
C(B&b) : b(b){};
private:
B& b;
};
public:
C get_c() { return C(*this); }
};
int main()
{
B b;
B::C c = b.get_c();
如果我有一个C库,其中包含一个声明为void g(void (*callback)());的函数,那么下面的代码是优雅而非法的:
struct A
{
// error C2159: more than one storage class specified (VC++ Nov 2012 CTP)
static extern "C" void callback()
{}
};
g(A::callback);
为什么C++11不支持这个?
我有一个使用GCC可以编译的c文件,没有问题,如下所示:
gcc foo.c
但是,使用同一个文件,我收到的错误是使用clang在main中定义了函数
clang foo.c
foo:230:1: error: function definition is not allowed here
{
^
foo.c:241:1: error: function definition is not allowed here
{
^
foo.c:253:1: error: function definition is not allowed here
这些错误实例是代码主部分中新函数的定义。我想知道为什
我以前有过Ruby方面的经验,我想学习一种编译语言,最近我刚刚开始学习C#。我想知道在C#中Ruby与散列的等价性是什么。如何在C#中创建类似于下面的Ruby散列的内容?
x = {"a"=>{"b"=>"c","d"=>["e","f",{"g"=>1}]}
在C#中创建这样的东西的标准方法是什么?我应该使用哈希表、字典还是对象?