小编use*_*334的帖子

命名空间内受保护的内部类编译时没有错误

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)

是这些编译器错误还是我对标准的误解?

说明:

  1. 根据MSDN,类不能具有受保护的内部访问修饰符,只有公共或内部(直接在命名空间内声明的类和结构(换句话说,不嵌套在其他类或结构中)可以是公共的或内部的.如果未指定访问修饰符,则内部为默认值).
  2. 并非所有上下文中的所有类型或成员都可以使用所有访问修饰符,并且在某些情况下,类型成员的可访问性受其包含类型(MSDN)的可访问性的约束.公众应该失败.受保护的内部对我来说是不明确的 - 内部修饰符不是必需的.

编辑:我使用Mono的事实是不必要的,因为问题是关于标准说什么而不是MONO做什么或不做什么.也许我正在编写自己的编译器.这就是为什么我引用MSDN准确地说是允许什么和不允许什么.

.net c# mono protected internal

5
推荐指数
1
解决办法
5332
查看次数

WriteConsoleW、wprintf 和 Unicode

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");\n
Run Code Online (Sandbox Code Playgroud)\n\n

输出是:

\n\n
\n
qwe\xc4\x85\xc4\x99\xc4\x97\xc5\xa1\xc5\xb3\nqwe\n
Run Code Online (Sandbox Code Playgroud)\n
\n\n

为什么 wprintf 在打印 qwe 后停止?\xc4\x85 中遇到的 \\0 字节应该终止宽字符字符串,据我所知

\n

windows unicode console

5
推荐指数
1
解决办法
7132
查看次数

从锯齿状数组初始化中省略c#new

来自: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)

c# jagged-arrays new-operator

4
推荐指数
1
解决办法
807
查看次数

为什么在覆盖和调用虚函数时我没有得到stackoverflow异常?

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的循环循环)时,很容易实现这种溢出.在这种情况下,什么阻止虚函数覆盖?

c# stack-overflow overriding virtual-functions

1
推荐指数
1
解决办法
154
查看次数

嵌入式 Lua 不打印到分配的控制台

我的代码如下(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 错误也会被打印)

windows console lua stdout

1
推荐指数
1
解决办法
1735
查看次数