有没有办法看到.NET框架外部实现的方法的源代码?
我知道Reference Source是一个很好的资源,但.NET框架中的很多核心类都是在外部实现的(我假设在C++中?).
例如,我对String类的内部工作非常感兴趣,但几乎一半的方法都是用extern关键字声明的,包括this[int index]实际上在字符串中保存字符.
我在哪里可以找到源代码String.this[int index]或String.nativeCompareOrdinalEx(String strA, int indexA, String strB, int indexB, int count)其他外部实现的方法?
另外,为什么有很多核心框架类在外部实现有特殊原因吗?它是否可以利用现有代码或出于性能原因或其他原因?
为什么BigInteger在C#中声明为ValueType(struct)?它似乎与声明为引用类型的字符串类型非常相似.
两者都是不可变的(值类型).两者都可以任意大.
我听到的建议是结构不应超过16个字节.BigInteger可以比16字节大得多,我认为这会使频繁的操作非常慢,因为它总是按值复制.
如果您尝试实现两个可能"统一"某些类型参数的接口,Roslyn将抛出一个错误:
public interface IFoo<T1, T2>
{
void Method(T1 a, T2 b);
}
public class Foo<T1, T2> : IFoo<T1, T2>, IFoo<T2, T1>
{
public void Method(T2 a, T1 b) { }
public void Method(T1 a, T2 b) { }
}
Run Code Online (Sandbox Code Playgroud)
Foo类不会编译,Roslyn会给你一个错误,说" Foo<T1, T2>不能同时实现这两个IFoo<T1, T2>,IFoo<T2, T1>因为它们可能会统一某些类型参数替换." 尽管对于大多数类型的替换都很好,但Roslyn不会让你甚至宣布这个类,因为有人可能会使用T1 == T2的类型替换.
但是,编译器让你声明这个没有问题:
public class Bar<T1, T2>
{
public void Method(T1 t) { }
public void Method(T2 t) { }
}
Run Code Online (Sandbox Code Playgroud)
这个类编译得很好,只有在客户端尝试调用该方法时才会抛出错误:
var bar = new Bar<int, int>();
bar.Method(5);
Run Code Online (Sandbox Code Playgroud)
Roslyn在这里给出了一个错误:"这个调用在以下方法或属性之间是不明确的: …