protected internal class foo
{
//this compiles without any errors
}
Run Code Online (Sandbox Code Playgroud)
也
internal class bar
{
public int quix;
protected internal int zyx;
//this compiles without any errors
}
Run Code Online (Sandbox Code Playgroud)
是这些编译器错误还是我对标准的误解?
说明:
编辑:我使用Mono的事实是不必要的,因为问题是关于标准说什么而不是MONO做什么或不做什么.也许我正在编写自己的编译器.这就是为什么我引用MSDN准确地说是允许什么和不允许什么.
AllocConsole();\nconsoleHandle = GetStdHandle(STD_OUTPUT_HANDLE);\nWriteConsoleW(consoleHandle, L"qwe\xc4\x85\xc4\x99\xc4\x97\xc5\xa1\xc5\xb3\\n", 9, NULL, NULL);\n_wfreopen(L"CONOUT$", L"w", stdout);\nwprintf(L"qwe\xc4\x85\xc4\x99\xc4\x97\xc5\xa1\xc5\xb3\\n");\nRun Code Online (Sandbox Code Playgroud)\n\n输出是:
\n\n\n\n\nRun Code Online (Sandbox Code Playgroud)\nqwe\xc4\x85\xc4\x99\xc4\x97\xc5\xa1\xc5\xb3\nqwe\n
为什么 wprintf 在打印 qwe 后停止?\xc4\x85 中遇到的 \\0 字节应该终止宽字符字符串,据我所知
\n来自:http://msdn.microsoft.com/en-us/library/2s05feca.aspx
请注意,您不能从元素初始化中省略new运算符,因为元素没有默认初始化:
int[][] jaggedArray3 =
{
new int[] {1,3,5,7,9},
new int[] {0,2,4,6},
new int[] {11,22}
};
Run Code Online (Sandbox Code Playgroud)
这是什么意思?
为什么可以省略新的:
int[] arrSimp = { 1, 2, 3 };
int[,] arrMult = { { 1, 1 }, { 2, 2 }, { 3, 3 } };
Run Code Online (Sandbox Code Playgroud)
但不可能:
int[][,] arrJagg = {new int[,] { { 1, 1} }, new int[,] { { 2, 2 } }, new int[,] { { 3, 3 } } };
Run Code Online (Sandbox Code Playgroud) class Program
{
static void Main(string[] args)
{
B foo = new B();
foo.DoWork();
Console.ReadLine();
}
}
public class A
{
public virtual void DoWork() { Console.WriteLine("A"); }
}
public class B : A
{
public override void DoWork() { base.DoWork(); Console.WriteLine("B"); }
}
Run Code Online (Sandbox Code Playgroud)
为什么我没有得到StackOverflow异常?据我所知,foo.DoWork()被调用,然后它调用base.DoWork(),它是虚拟的并且在类B.DoWork()方法中重写,它将重复调用base.DoWork()直到栈溢出.当使用它而不是base(调用self的循环循环)时,很容易实现这种溢出.在这种情况下,什么阻止虚函数覆盖?
我的代码如下(Windows 平台):
AllocConsole();
FILE *fp = freopen("CONOUT$", "w", stdout); //couldn't find documentation what CONOUT$ actually is
lua_State *lua_state = luaL_newstate();
luaL_openlibs(lua_state);
if(luaL_dostring(lua_state, "print 'It works!'"))
{
printf("%s\n", lua_tostring(lua_state, -1));
}
Run Code Online (Sandbox Code Playgroud)
我无法获得 Lua 输出,而正常的 printf 可以工作(Lua 错误也会被打印)