我目前正在开发一个UI开发项目,并决定在Silvelight中实现它。我了解Microsoft开发人员尝试最小化分发的大小,这就是为什么不包括常规.NET Framework中的一些(很多)类的原因。是否可以看到Silverlight 3库中包含更多类?
答案 0 :(得分:6)
顺便说一句,您总是可以在核心.NET Framework库上使用Reflector来获取代码形式中缺少的“好东西”。
这是redgate的反射器:http://www.red-gate.com/products/reflector/
以下是我提取的代码和HttpUtility.ParseQueryString的修改版本:
public IDictionary<string, string> ParseParams(string paramsString)
{
if (string.IsNullOrEmpty(paramsString))
throw new ArgumentNullException("paramsString");
// convert to dictionary
var dict = new Dictionary<string, string>();
// remove the leading ?
if (paramsString.StartsWith("?"))
paramsString = paramsString.Substring(1);
var length = paramsString.Length;
for (var i = 0; i < length; i++) {
var startIndex = i;
var pivotIndex = -1;
while (i < length) {
char ch = paramsString[i];
if (ch == '=') {
if (pivotIndex < 0) {
pivotIndex = i;
}
} else if (ch == '&') {
break;
}
i++;
}
string name;
string value;
if (pivotIndex >= 0) {
name = paramsString.Substring(startIndex, pivotIndex - startIndex);
value = paramsString.Substring(pivotIndex + 1, (i - pivotIndex) - 1);
} else {
name = paramsString.Substring(startIndex, i - startIndex);
value = null;
}
dict.Add(UrlDecode(name), UrlDecode(value));
// if string ends with ampersand, add another empty token
if ((i == (length - 1)) && (paramsString[i] == '&'))
dict.Add(null, string.Empty);
}
return dict;
}
这只是一个例子,但正如你所看到的,如果你真正需要的东西已经在.NET BCL中......那么为什么要重新实现呢?只需反编译并在Silverlight中重新实现它。
IMO你反编译的大部分内容可能都是基本的vanilla东西,“很高兴有钱”,无论如何都缺少Silverlight,所以我认为这不会引起任何法律问题。
当然,您可以自己重新实现查询字符串解析逻辑,但正如您所看到的那样,您可能错过了所有细节,而不是提及性能问题。
答案 1 :(得分:3)
我希望不是,我怀疑它。
斯科特·格思里(Scott Guthrie)显然是为微软负责该项目,他表示,如果没有任何空间留给任何未来“必须拥有”的话,他不想把“好有钱”放进去。我认为他们已经取得了平衡 - 他们没有多少遗漏你自己不能写的东西。
答案 2 :(得分:1)
Silverlight 3的规模无疑会增长。 Silverlight 3将针对移动设备,因此毫无疑问,该软件包将保持较小。然而,人们要求许多新功能:打印,WCF添加,3D,麦克风支持,硬件加速......毫无疑问它将会增长。它只是将它集成到核心中,或者你的XAP文件必须要大得多。
答案 3 :(得分:0)
.NET框架包含很多在Silverlight等沙盒环境中很少或没有用的东西。
我不希望核心CLR中包含更多的标准.NET框架,但是WPF会有很多东西进入Silverlight3。