请考虑以下架构:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="Root">
<xs:sequence>
<xs:element ref="Child" />
<xs:element name="Child2" type="Child" />
</xs:sequence>
<xs:attribute ref="Att" />
<xs:attribute name="Att2" type="Att" />
</xs:complexType>
<xs:complexType name="Child">
<xs:attribute ref="Att" />
</xs:complexType>
<xs:attribute name="Att" type="xs:integer" />
</xs:schema>
Run Code Online (Sandbox Code Playgroud)
第ref
6行的"Child"失败,而第type
7行验证.对于属性,失败时ref
成功type
.我想知道为什么.
我的理解ref
是,它只是引用了另一个元素,并指定您希望在该位置看到引用类型的实例(在定义中给出名称).显然我错了,那ref
究竟是什么意思呢?
在获取TreeView控件以显示节点图像时出现问题.下面的代码有时会工作,但有时无法显示任何图像.
private TreeNode AddNodeForCore(TreeNode root, Core c) {
string key = GetImageKey(c);
TreeNode t = root.Nodes.Add(c.Name, c.Name, key, key);
t.Tag = c;
return t;
}
Run Code Online (Sandbox Code Playgroud)
请注意,当它失败时,TreeView无法显示任何节点的任何图像.TreeView确实为其分配了ImageList,图像键肯定在图像集合中.
编辑:
我的google-fu很弱.简直不敢相信我没有找到答案.
STL向量模板将元素访问器定义为const和非const变体,例如:
reference operator[](size_type __n)
{return *(this->_M_impl._M_start + __n);}
const_reference operator[](size_type __n) const
{return *(this->_M_impl._M_start + __n);}
Run Code Online (Sandbox Code Playgroud)
什么时候编译器决定使用一个版本而不是另一个版本?向量本身未定义为const,也不存储在其中的元素.所以有两个功能:
A f(int i) const
{ return myVector[i]; }
A f(int i)
{ return myVector[i]; }
Run Code Online (Sandbox Code Playgroud)
我的理解是,第一个将调用operator []的const版本并返回一个const A.第二个调用非const版本并返回一个非const A?
对我来说,f()的第一个版本似乎是"正确的"写入,因为函数没有改变任何东西,但是调用者可能会惊讶于它返回一个const A.当然如果我想要一个const返回,我应该将f()定义为:
const A f(int i) const //Note the extra const at the start
{ return myVector[i]; }
Run Code Online (Sandbox Code Playgroud)
哪个会告诉谁打算调用者期望一个const回来.
所以额外的const出现了魔法?如果我使用boost :: ptr_vector而不是std :: vector,那么额外的const应用于什么?数据?指针?都?
假设我有一个C
继承自2个接口(I1
和I2
)的类.我还有一个方法(DoStuff
)的两个版本,每个版本都将一个接口作为参数.如果我打电话DoStuff(C)
,哪一个被叫?
interface I1 { ... }
interface I2 { ... }
class C : I1, I2 { ... }
int DoStuff(I1 target) { ... }
int DoStuff(I2 target) { ... }
//What gets called here?
C target = new C()
DoStuff(target)
Run Code Online (Sandbox Code Playgroud)
如果I2
派生自I1
,我认为它相对简单 - I2
版本被调用.我对接口是独立的情况感兴趣.
假设我无法编辑C
,I1
或I2
.和.NET 2.0如果有任何区别.
我有以下函数定义:
Function Parameterless() as String
Run Code Online (Sandbox Code Playgroud)
它没有覆盖或重载.以下行将很乐意编译并运行:
Dim s as String = Parameterless(1)
Run Code Online (Sandbox Code Playgroud)
到底是怎么回事?