这编译:
public interface IMyInterface
{
event Action<dynamic> OnSomeEvent;
}
class MyInterface : IMyInterface
{
public event Action<dynamic> OnSomeEvent;
}
Run Code Online (Sandbox Code Playgroud)
但是当我将界面和实现分离到不同的项目时,我得到:
Accessor'TestProject2.MyInterface.OnSomeEvent.remove'无法为类型'TestProject2.MyInterface'实现接口成员'InterfaceNamespace.IMyInterface.remove_OnSomeEvent(System.Action)'.使用显式接口实现.
只有动态参数才会出现这种情况......
借助.NET 4.0中的新动态功能,似乎应该可以动态实现接口,例如:
public interface IFoo
{
string Bar(int baz);
}
public class Foo : IFoo
{
public string Bar(int baz) { return baz.ToString(); }
}
public class Proxy : IDynamicMetaObjectProvider
{
private readonly object target;
public Proxy(object target) { this.target = target; }
// something clever goes here
}
Run Code Online (Sandbox Code Playgroud)
然后我希望有一些方法可以写:
dynamic proxy = new Proxy(new Foo());
IFoo fooProxy = (IFoo)proxy; // because the target object implements it
string bar = fooProxy.Bar(123); // delegates through to the target implementation
Run Code Online (Sandbox Code Playgroud)
但是,到目前为止,我还不确定要替换什么// …
是否可以使用变量动态实例化一个类?例如在PHP中可能是这样的吗?
class foo
{
public $something;
}
$class_name = "foo";
$f = new $class_name();
Run Code Online (Sandbox Code Playgroud) 在重构一些代码时,我遇到了这个奇怪的编译错误:
构造函数调用需要动态调度,但不能因为它是构造函数初始值设定项的一部分.考虑转换动态参数.
当尝试调用采用动态参数的基本方法/构造函数时,似乎会发生这种情况.例如:
class ClassA
{
public ClassA(dynamic test)
{
Console.WriteLine("ClassA");
}
}
class ClassB : ClassA
{
public ClassB(dynamic test)
: base(test)
{
Console.WriteLine("ClassB");
}
}
Run Code Online (Sandbox Code Playgroud)
如果我将参数转换为object,它会起作用,如下所示:
public ClassB(dynamic test)
: base((object)test)
Run Code Online (Sandbox Code Playgroud)
所以,我有点困惑.为什么我必须把这个令人讨厌的演员 - 为什么编译器不能弄明白我的意思?
是否可以将未知XML反序列化为对象,如下所示?
var xml = @"<Students><Student><Name>Arul</Name><Mark>90</Mark></Student></Students>";
var serializer = new XmlSerializer(typeof(DynamicObject));
dynamic students = serializer.Deserialize(new XmlTextReader(new StringReader(xml)));
Run Code Online (Sandbox Code Playgroud) 我的理解是,我可以将混合数据存储在JavaScript数组中,以及将数组中的任何元素更改为其他类型.解释器如何跟踪任何元素在物理内存中的位置.如果我将元素更改为更大的数据类型,如何防止覆盖下一个元素中的数据.
我假设数组只存储对实际对象的引用,并且当放置在数组中时,基元被包裹在场景后面.
假设是这种情况,如果我对原始变量有不同的句柄并更改存储在数组中的值是同步性保持?
我知道我可能已经回答了我自己的问题,但我不确定,我找不到有关此事的任何信息.
我正在尝试使用JavaScript创建<iframe>,然后将<script>元素附加到<iframe>,我想在<iframe> d文档的上下文中运行.
不幸的是,我似乎做错了 - 我的JavaScript似乎成功执行,但<script>的上下文是父页面,而不是<iframe> d文档.当浏览器请求iframe_test.js时,我在Firebug的"Net"选项卡中也会收到301错误,但它会再次请求它(不知道为什么?)成功.
这是我正在使用的代码(现场演示http://onespot.wsj.com/static/iframe_test.html):
iframe_test.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title><iframe> test</title>
</head>
<body>
<div id="bucket"></div>
<script type="text/javascript" src="http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$('#bucket').append('<iframe id="test"></iframe>');
setTimeout(function() {
var iframe_body = $('#test').contents().find('body');
iframe_body.append('<scr' + 'ipt type="text/javascript" src="http://onespot.wsj.com/static/iframe_test.js"></scr' + 'ipt>');
}, 100);
});
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
iframe_test.js
$(function() {
var test = '<p>Shouldn\'t this be inside the <iframe>?</p>';
$('body').append(test);
});
Run Code Online (Sandbox Code Playgroud)
一件似乎不寻常的事情是iframe_test.js中的代码甚至可以工作; …
我有一个表单,用户可以为多个城市添加多个选择框.问题是每个新生成的选择框都需要具有唯一的ID.可以这样做是JavaScript吗?
更新:这是选择城市的表格的一部分.另请注意,当选择特定状态时,我正在使用一些php来填充城市.
<form id="form" name="form" method="post" action="citySelect.php">
<select id="state" name="state" onchange="getCity()">
<option></option>
<option value="1">cali</option>
<option value="2">arizona</option>
<option value="3">texas</option>
</select>
<select id="city" name="city" style="width:100px">
</select>
<br/>
</form>
Run Code Online (Sandbox Code Playgroud)
这是javascript:
$("#bt").click(function() {
$("#form").append(
"<select id='state' name='state' onchange='getCity()'>
<option></option>
<option value='1'>cali</option>
<option value='2'>arizona</option>
<option value='3'>texas</option>
</select>
<select id='city' name='city' style='width:100px'></select><br/>"
);
});
Run Code Online (Sandbox Code Playgroud) main例如,在我的C++ 函数中,如果我有一个指向使用堆内存的变量的指针(而不是堆栈内存) - 在我的应用程序退出后会自动解除分配吗?我会这么认为.
即便如此,即使您认为永远不会在退出时自动释放内存的情况下使用堆分配,也总是删除堆分配是一种好习惯吗?
例如,这样做有什么意义吗?
int main(...)
{
A* a = new A();
a->DoSomething();
delete a;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我想也许以防我重构(或其他人重构)代码并将其放在应用程序的其他地方,这delete真的是必要的.
除了Brian R. Bondy(其中特别谈到C++中的含义)的答案之外,Paul Tomblin 对C特定问题也有一个很好的答案,该问题也讨论了C++析构函数.
当迭代一组程序集(例如AppDomain.CurrentDomain.GetAssemblies())时,如果您尝试访问CodeBase等属性,动态程序集将抛出NotSuportedException.如何在不触发和捕获NotSupportedException的情况下判断程序集是否是动态的?