C++/WinRT ile temel sınıfınızı çağırma ve geçersiz kılma

Önemli

C++/WinRT ile çalışma zamanı sınıflarını kullanma ve yazma hakkında bilginizi destekleyen temel kavramlar ve terimler için bkz. C++/WinRT ile API'leri kullanma ve C++/WinRT ile API'leri yazma.

MeasureOverride ve OnApplyTemplate gibi geçersiz kılınabilir yöntemler uygulama

XAML'de uygulamanızın takabileceği bazı uzantı noktaları vardır, örneğin:

Control çalışma zamanı sınıfından bir özel denetim türetirsiniz; bu sınıfın kendisi de temel çalışma zamanı sınıflarından türetilmiştir. Ayrıca türetilmiş sınıfınızda geçersiz kılabileceğiniz overridable, FrameworkElement ve UIElement yöntemleri vardır. Bunu nasıl yapacağınızı gösteren bir kod örneği aşağıda verilmiştır.

struct BgLabelControl : BgLabelControlT<BgLabelControl>
{
...
    // Control overrides.
    void OnPointerPressed(Microsoft::UI::Xaml::Input::PointerRoutedEventArgs const& /* e */) const { ... };

    // FrameworkElement overrides.
    Windows::Foundation::Size MeasureOverride(Windows::Foundation::Size const& /* availableSize */) const { ... };
    void OnApplyTemplate() const { ... };

    // UIElement overrides.
    Microsoft::UI::Xaml::Automation::Peers::AutomationPeer OnCreateAutomationPeer() const { ... };
...
};

Geçersiz kılınabilir yöntemler farklı dil projeksiyonlarında kendilerini farklı şekilde gösterir. Örneğin C# dilinde geçersiz kılınabilir yöntemler genellikle korumalı sanal yöntemler olarak görünür. C++/WinRT'de sanal veya korumalı değildir, ancak yine de bunları geçersiz kılabilir ve yukarıda gösterildiği gibi kendi uygulamanızı sağlayabilirsiniz.

C++/WinRT'de bu geçersiz kılınabilir yöntemlerden birini geçersiz kılıyorsanız, IDL'niz runtimeclass yöntemi bildirmemelidir. Gösterilen söz dizimi hakkında base_type daha fazla bilgi için bu konunun sonraki bölümüne bakın (Temel türünüzü çağırma).

IDL

namespace Example
{
    runtimeclass CustomVSM : Microsoft.UI.Xaml.VisualStateManager
    {
        CustomVSM();
        // note that we don't declare GoToStateCore here
    }
}

C++/WinRT

namespace winrt::Example::implementation
{
    struct CustomVSM : CustomVSMT<CustomVSM>
    {
        CustomVSM() {}

        bool GoToStateCore(winrt::Microsoft::UI::Xaml::Controls::Control const& control, winrt::Microsoft::UI::Xaml::FrameworkElement const& templateRoot, winrt::hstring const& stateName, winrt::Microsoft::UI::Xaml::VisualStateGroup const& group, winrt::Microsoft::UI::Xaml::VisualState const& state, bool useTransitions) {
            return base_type::GoToStateCore(control, templateRoot, stateName, group, state, useTransitions);
        }
    };
}

Temel türünüzü çağırmak

tür diğer adını base_typekullanarak temel türünüze erişebilir ve bu türdeki yöntemleri çağırabilirsiniz. Bunun bir örneğini önceki bölümde görmüştük; ancak herhangi bir temel sınıf üyesine erişmek için kullanabilirsiniz base_type (yalnızca geçersiz kılınan yöntemlere değil). Bir örnek aşağıda verilmiştir:

struct MyDerivedRuntimeClass : MyDerivedRuntimeClassT<MyDerivedRuntimeClass>
{
    ...

    void Foo()
    {
        // Call my base type's Bar method.
        base_type::Bar();
    }
};

Önemli API'ler