虽然我理解F#中的自我标识符,但我对这种灵活性的好处感到困惑.为什么F#不仅仅this.Blah像C#一样支持并且完成它?我猜有些人用它来提高可读性,但即便如此,这似乎是一个延伸.那么,这种语言功能的用途/好处是什么?
对于未启动的,下面是一个定义类型范围的自身标识符"self"和方法范围标识符"this"的示例.该示例来自上面链接的MSDN文章.
type MyClass2(dataIn) as self =
let data = dataIn
do
self.PrintMessage()
member this.PrintMessage() =
printf "Creating MyClass2 with Data %d" data
Run Code Online (Sandbox Code Playgroud) 我想创建一个FsCheck生成器来生成"复杂"对象的实例.复杂,我指的是C#中的现有类,它具有许多子属性和集合.这些属性和集合又需要为它们生成数据.
想象一下,这个课程以Menu儿童系列命名,Dishes并且Drinks(我正在制作它,所以忽略了糟糕的设计).我想做以下事情:
Dishes和可变数量的Drinks.Dish和Drink实例以填充其属性.Menu使用FsCheck API 在实例上设置一些其他基本属性.如何为这种类型的实例编写生成器?这是一个坏主意吗?(我是基于财产的测试的新手).我已经阅读了文档,但到目前为止显然未能将其全部内化.
有一个很好的例子来生成记录,但这实际上只生成3个相同类型的值float.
给定PEVerify错误和警告输出(如下所示),如何跟踪违规类和接口名称?假设我不是编译器作者或IL魔术师.
[MD]: Error: Class implements interface but not method (class:0x02000091; interface:0x06000169;method:0x00000000). [token:0x09000043]
[MD]: Warning: MemberRef has a duplicate, token=0x0a0001ff. [token:0x0A000060]
Run Code Online (Sandbox Code Playgroud) 我改变了从一类public abstract AwesomeClass到public sealed AwesomeClass.我还添加了一个新房产.所有现有成员均未变更.我知道这是一个突破性的变化.AwesomeClass通过反射实现或依赖它的客户将被打破.
我的问题是,那些只使用AwesomeClass我所提供的实例成员的客户是否会被破坏(如果是的话,那么如何)? 任何客户都不会依赖我实现的任何类型,AwesomeClass因为它们都是内部的.我想不是,但......
这是前后的课程:
public abstract class AwesomeClass
{
public abstract Guid SuperGuid { get; set; }
public abstract int SuperInt { get; set; }
}
public sealed class AwesomeClass
{
public Guid SuperGuid { get; set; }
public int SuperInt { get; set; }
public int OtherSuperInt { get; set; }
}
Run Code Online (Sandbox Code Playgroud) 是否可以"扩展"F#编译器来进行自定义编译时字符串检查?我正在考虑类似于StringFormat使用sprintf时对字符串的检查等.当我说"扩展"时,我并不是指构建编译器的自定义版本,我的意思是使用现有的支持技术.
在我的头顶,你可能有一个RegexFormat类型.您提供正则表达式,编译器将使用正则表达式进行静态分析.例如
//Setup RegexFormat with IP address regex and type abbreviation IpRegexFormat?
//Compile error. ipAddress expects IpRegexFormat!
let ip = ipAddress "192.168.banana.1"
Run Code Online (Sandbox Code Playgroud)
如果没有,也许这是我的类型提供者:) - 如果整个事情是一个可怕的想法,请告诉我!
我正在通过 WinDbg DMP 文件调查内存泄漏。我发现有很多实例AmazeType在堆中,虽然它是一个很好的类型,有办法存在太多。我想知道谁在囤积它们。
!gcroot-ingAmazeType引导我进入“引用计数句柄”。这是有道理的,因为真棒类型列表通过 COM 可调用包装器存储在 COM 对象实例的属性中。
0:047> !gcroot 00000001c093e448
HandleTable:
00000000015041a0 (ref counted handle)
-> 00000001c0932fd8 System.Collections.Generic.List`1[[AmazeType, AmazeAssembly]]
-> 00000001c0927ef8 BaseAmazeType[]
-> 00000001c093e448 AmazeType
Run Code Online (Sandbox Code Playgroud)
可以用引用计数句柄做什么00000000015041a0来获取有关 RCW 和与之相关的 COM 对象的信息?如果没有,如何交替攻击问题?