silverlight/c++开发笔记(继承与模板)

来源:互联网 发布:捕鱼达人源码下载 编辑:程序博客网 时间:2024/06/16 11:57

1关键 public IXRCollection<IXRDependencyObject*, IXRDependencyObject*>

和template <typename In_T, typename Out_T>对应。

父类:

template <typename In_T, typename Out_T>
class __declspec(novtable) IXRCollection :
    public IXRDependencyObject
{
public:
    /// <summary>
    /// Add an item to the collection and optionaly get back the index where it was added.
    /// </summary>
    /// <param name="pvalue">[in] value to be added</param>
    /// <param name="pIndex">[out, optional] index where this item was added</param>
    virtual HRESULT STDMETHODCALLTYPE   Add(
        In_T pvalue, 
        __out_opt int *pIndex
        ) = 0;

。。。。。。

};


子类:

class __declspec(novtable) IXRItemCollection : public IXRCollection<IXRDependencyObject*, IXRDependencyObject*>
{
public:
};


实例化子类:

IXRItemCollection* ppItems;

hr = ppItems->Add((IXRDependencyObject*)pComBoxItem,NULL);


2silverlight中比较上层的类,很多类都可以调用这些方法:

 class __declspec(novtable) IXRDependencyObject: 
    public IUnknown
{
public:

virtual HRESULT STDMETHODCALLTYPE SetName(__in const WCHAR* pName) = 0;
virtual HRESULT STDMETHODCALLTYPE GetName(__out BSTR* pName) = 0;

 ......

 virtual HRESULT STDMETHODCALLTYPE GetAttachedProperty(const WCHAR *pDP, XRGridLength *pValue) = 0;

......

};


3多态的实际运用:

HRESULT CShell::OnClickDial_MicSwitch( IXRDependencyObject * pSender , XRMouseButtonEventArgs * pArgs)

{

HRESULT hr = ((IXRButtonPtr)pSender)->SetVisibility(XRVisibility_Collapsed);

}

点击的时候系统调用OnClickDial_MicSwitch函数 并且给IXRDependencyObject 赋IXRButtonPtr类型的值。强制转换还原。