小编Sau*_*tka的帖子

.NET代表:他们是如何构建的?

在检查C#和.NET中的代表时,我注意到一些有趣的事实:

在C#中创建委托会创建一个MulticastDelegate使用构造函数派生的类:

.method public hidebysig specialname rtspecialname instance 
   void .ctor(object 'object', native int 'method') runtime managed { }
Run Code Online (Sandbox Code Playgroud)

这意味着它需要实例和指向该方法的指针.然而,在C#中构造委托的语法表明它有一个构造函数

new MyDelegate(int () target)
Run Code Online (Sandbox Code Playgroud)

我可以将其识别int ()为函数实例(int *target() 将是C++中的函数指针).很明显,C#编译器从函数名定义的方法组中选出正确的方法并构造委托.所以第一个问题是,C#编译器(或者Visual Studio,准确地说)从哪里选择这个构造函数签名?我没有注意到任何可以区分的特殊属性或东西.这是某种编译器/ visualstudio魔术吗?如果没有,那么T (args) target结构在C#中是否有效?我没有设法用它来编译,例如:

int()target = MyMethod;

是无效的,所以做任何事情MyMetod,例如调用.ToString()它(这确实有一定意义,因为这在技术上是一个方法,但我想应该可以通过强制显式选择一个方法,例如(int())MyFunction.所以所有这个纯粹的编译魔术?通过反射器看结构揭示了另一种语法:

Func CS $ 1 $ 0000 = new Func(null,(IntPtr)Foo);

这与反汇编的构造函数签名一致,但这不能编译!

最后一个有趣的注意事项是类DelegateMulticastDelegate另外一组构造函数:

.method family hidebysig specialname rtspecialname instance void .ctor(类System.Type target,string'method')cil managed

从实例和方法指针到类型和字符串方法名称的转换发生在哪里?这可以通过runtime managed自定义委托构造函数签名中的关键字来解释,即运行时是否在此处执行此操作?

编辑 …

.net c# clr delegates .net-internals

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

报告服务正确的项目对齐

有没有办法使用报表服务2008将项目与页面或报表中的其他项目对齐?现在,我通过手动将项目向右移动以使它们看起来正确对齐来模拟这种行为,但是,当有一个具有动态宽度的项目时(例如,数据与水平方向相关的Tablix),显然,这方法失败.这样做的正确方法是什么?

reporting-services ssrs-2008

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

WPF:设置GridViewColumn的文本对齐方式

默认情况下,文本在a的标题中居中ListView(不在内容单元格中!),我一直在努力让它保持对齐,这就是我想出的:

<ListView.Resources>
    <DataTemplate x:Key="Templ">
       <TextBlock HorizontalAlignment="Left" Text="{Binding}"/>
    </DataTemplate>
</ListView.Resources>   
...
<GridViewColumn HeaderTemplate="{StaticResource Templ}">File</GridViewColumn>
Run Code Online (Sandbox Code Playgroud)

这似乎是改变标题外观的正确位置,因为我可以更改其他属性,如Margin等,但它不响应HorizontalAlignment属性!我猜测文本框的大小适合内容并且本身居中,从而使对齐属性变得多余.

如何使文本保持对齐?

wpf xaml listview

7
推荐指数
1
解决办法
2万
查看次数

SSRS 2008日期格式化和导出到excel混乱

假设我在Reporting Services模板中有一个带日期值的字段,例如=CDate("2010.12.03"),我将"d"格式应用于此单元格,根据描述,"将反映报告的区域设置".我使用英语生成报告,日期显示为12/03/2010,这很好.现在,当我出口这份报告到Excel,我不知道是什么_ _发生.

第一种情况:计算机的区域设置设置为英语(美国).当我打开excel文档时,单元格中看到的值12/03/2010正如预期的那样.当我点击它时,我可以看到存储在单元格中的实际值2010.12.03,这似乎也是合理的 - 一些格式应用于单元格,它不是简单地导出为文本.但是当我试图弄清楚应用了什么类型的格式时,通过右键单击并检查格式单元格,我看到格式是"常规",即没有!怎么会这样 ?顺便说一下,这是Excel 2010,但文件本身当然是.xls.

第二种情况,它变得更有趣:现在计算机的区域设置为例如日期格式的立陶宛2010.12.03.我打开同一份文件看看12.03.2010.现在这根本没有任何意义.导出很多次,我遇到过,有时单元格格式化为[$-10409]m.d.yyyyexcel 格式(在"自定义"部分下).这是什么,10409是什么意思?最奇怪的部分:如果我不保存关闭文档,将计算机区域更改回英语(美国),重新打开文档,格式现在就是[$-10409]m/d/yyyy!这怎么可能 !??

基本上同样的事情发生在数字和千位/小数分隔符上 - excel使用计算机的区域来格式化这些,但是单元格的实际格式可能类似于[$-10409]#,##0.00;-#,##0.00或一般 - 再次,取决于计算机的区域,方向风和外面的温度.

那么我的问题是,首先,_ _正在发生什么?第二,excel文档应该如何根据规范行事,即在BIDS设计的格式"将反映报告的区域设置"的声明是什么,我选择日期文本框的"d"格式,意味着什么?这是否意味着,格式将由报告的语言决定,结果在世界上所有计算机上看起来都是一样的(这是有道理的,因为这是其他格式的行为,即如果您将日期导出到pdf,它始终保持不变)?如果不是,这在excel中似乎是部分情况,为什么导出的日期单元格不具有区域日期格式,即您通常在excel中使用的日期格式,

这些是excel的某种局限还是什么?为什么我们不能有一致的行为,即要么使一切都对查看文档的计算机文化敏感,要么不这样做,为什么实际行为介于两者之间?

reporting-services ssrs-2008

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