C# 在c中看到T型内部实现的可能性
当@没有人回答我的问题时,他提到了下面这样的事情C# 在c中看到T型内部实现的可能性,c#,.net,generics,.net-4.0,C#,.net,Generics,.net 4.0,当@没有人回答我的问题时,他提到了下面这样的事情 using(SomeClass c = new SomeClass()) { } ** 将转化为 ** 你怎么知道的 另外,你们中的一些人提到,它将以某种方式在内部实现,您如何看待某些东西的内部实现 例如,当我浏览MSDN中泛型的概念时,他们说List是泛型的,并展示了如何在内部实现List的示例实现。我们如何才能真正为其他人做到这一点 我试过VS2010。但对象浏览器仅显示特定类型的公开方法或字段 我只是好奇,因为list的内部实现的例子
using(SomeClass c = new SomeClass())
{ }
**
将转化为
**
你怎么知道的
另外,你们中的一些人提到,它将以某种方式在内部实现,您如何看待某些东西的内部实现
例如,当我浏览MSDN中泛型的概念时,他们说List是泛型的,并展示了如何在内部实现List的示例实现。我们如何才能真正为其他人做到这一点
我试过VS2010。但对象浏览器仅显示特定类型的公开方法或字段
我只是好奇,因为list的内部实现的例子太棒了。真有趣 在第8.13章中解释了这一点:
表单的using语句
using (ResourceType resource = expression) statement
对应于三种可能的扩展之一。当ResourceType为
一种不可为null的值类型,扩展名为
{
ResourceType resource = expression;
try {
statement;
}
finally {
((IDisposable)resource).Dispose();
}
}
{
ResourceType resource = expression;
try {
statement;
}
finally {
if (resource != null) ((IDisposable)resource).Dispose();
}
}
{
ResourceType resource = expression;
IDisposable d = (IDisposable)resource;
try {
statement;
}
finally {
if (d != null) d.Dispose();
}
}
否则,当ResourceType是可为null的值类型或引用时
类型而非动态,扩展为
{
ResourceType resource = expression;
try {
statement;
}
finally {
((IDisposable)resource).Dispose();
}
}
{
ResourceType resource = expression;
try {
statement;
}
finally {
if (resource != null) ((IDisposable)resource).Dispose();
}
}
{
ResourceType resource = expression;
IDisposable d = (IDisposable)resource;
try {
statement;
}
finally {
if (d != null) d.Dispose();
}
}
否则,当ResourceType是动态的时,扩展是
{
ResourceType resource = expression;
try {
statement;
}
finally {
((IDisposable)resource).Dispose();
}
}
{
ResourceType resource = expression;
try {
statement;
}
finally {
if (resource != null) ((IDisposable)resource).Dispose();
}
}
{
ResourceType resource = expression;
IDisposable d = (IDisposable)resource;
try {
statement;
}
finally {
if (d != null) d.Dispose();
}
}
关于第二个问题:.NET源代码可供浏览/下载。勾选此问题:在第8.13章:
表单的using语句
using (ResourceType resource = expression) statement
对应于三种可能的扩展之一。当ResourceType为
一种不可为null的值类型,扩展名为
{
ResourceType resource = expression;
try {
statement;
}
finally {
((IDisposable)resource).Dispose();
}
}
{
ResourceType resource = expression;
try {
statement;
}
finally {
if (resource != null) ((IDisposable)resource).Dispose();
}
}
{
ResourceType resource = expression;
IDisposable d = (IDisposable)resource;
try {
statement;
}
finally {
if (d != null) d.Dispose();
}
}
否则,当ResourceType是可为null的值类型或引用时
类型而非动态,扩展为
{
ResourceType resource = expression;
try {
statement;
}
finally {
((IDisposable)resource).Dispose();
}
}
{
ResourceType resource = expression;
try {
statement;
}
finally {
if (resource != null) ((IDisposable)resource).Dispose();
}
}
{
ResourceType resource = expression;
IDisposable d = (IDisposable)resource;
try {
statement;
}
finally {
if (d != null) d.Dispose();
}
}
否则,当ResourceType是动态的时,扩展是
{
ResourceType resource = expression;
try {
statement;
}
finally {
((IDisposable)resource).Dispose();
}
}
{
ResourceType resource = expression;
try {
statement;
}
finally {
if (resource != null) ((IDisposable)resource).Dispose();
}
}
{
ResourceType resource = expression;
IDisposable d = (IDisposable)resource;
try {
statement;
}
finally {
if (d != null) d.Dispose();
}
}
关于第二个问题:.NET源代码可供浏览/下载。检查此问题:听起来您正在寻找反编译器。有,但一个流行的免费的是。还有一种是免费的。如果你想要更多的功能并且不介意花钱,你可能想看看。听起来你在寻找一个反编译器。有,但一个流行的免费的是。还有一种是免费的。如果您想要更多的功能,并且不介意花钱,您可能想看看。Marcin已经为您在这里讨论的特定转换确定了使用语句。但是,您还应该了解像和这样的工具,还有很多 Reflector和dotPeek将把您的代码从编译后的代码反编译回C,并进行各种级别的优化,以尝试进行C编译器的转换,基本上,它们还允许您查看IL-这也是ildasm提供给您的 IL为您提供了关于编译代码的最终答案,但是经常查看反编译代码(尤其是在关闭优化的情况下),或者将反编译器设置为提供C2代码(例如)可能更简单 值得注意的是,编译器执行的许多转换将对生成的额外类型、字段和方法使用无法描述的名称。例如,如果您有:
Action foo = () => Console.WriteLine("I'm a lambda!");
然后,这可能会生成一个名为b_u0的方法。在普通的C语言中,您无法引用它,因为C标识符不能包含,但它是有效的IL。Marcin用using语句为您在这里讨论的特定转换确定了它。但是,您还应该了解像和这样的工具,还有很多 Reflector和dotPeek将把您的代码从编译后的代码反编译回C,并进行各种级别的优化,以尝试进行C编译器的转换,基本上,它们还允许您查看IL-这也是ildasm提供给您的 IL为您提供了关于编译代码的最终答案,但是经常查看反编译代码(尤其是在关闭优化的情况下),或者将反编译器设置为提供C2代码(例如)可能更简单 值得注意的是,编译器执行的许多转换将对生成的额外类型、字段和方法使用无法描述的名称。例如,如果您有:
Action foo = () => Console.WriteLine("I'm a lambda!");
然后,这可能会生成一个名为b_u0的方法。你不能在普通C中引用它,因为C标识符不能包含但它是有效的IL。清除并感谢这一行,你不能在普通C中引用它,因为C标识符不能包含<或>,但它是有效的中间语言。.清除并感谢这一行,你不能在普通C中引用它作为C标识符不能包含<或>,但它是有效的中间语言..我以前在Reflector免费时使用它,但自从Reflector开始收费后,我一直在使用ILSpy。我的一些大学喜欢dotPeek,但我没有使用它。我曾经在它免费的时候使用Reflector,但自从Ref
莱克托开始收费。我的一些学院喜欢dotPeek,但我没有使用它。如果您对某些框架类的实际实现方式感兴趣,Microsoft已经提供了源代码。如果您对某些框架类的实际实现方式感兴趣,Microsoft已经提供了源代码。