Я хотел бы разработать библиотеку управления пользователями WPF, в которой используется библиотека классов с функцией-членом, которую можно переопределить. Я использую C # 4.0 и VS 2010.
Моя библиотека тестовых классов выглядит так:
using System.Diagnostics;
namespace MyLibrary {
public class Foo {
virtual public void Bar() {
Debug.WriteLine(" Hi from MyLibrary, class Foo, method Bar.");
}
}
}
Мой пользовательский элемент управления WPF выглядит следующим образом:
using System.Windows.Controls;
using System.Diagnostics;
using MyLibrary;
namespace MyUserControl {
public partial class UserControl1 : UserControl {
public UserControl1() {
InitializeComponent();
Debug.WriteLine("MyUserControl: ");
var foo = new Foo();
foo.Bar();
}
}
}
Я создал приложение WPF с именем ProgramA, и оно выглядит так:
using System;
using System.Diagnostics;
using System.Windows;
namespace ProgramA {
public partial class MainWindow : Window {
public MainWindow() {
InitializeComponent();
}
}
}
При отладке ProgramA вы увидите:
MyUserControl:
Hi from MyLibrary, class Foo, method Bar.
в окне вывода отладки. Пока все хорошо.
Я также создал ProgramB, чтобы попытаться переопределить метод Bar в MyLibrary.
ProgramB выглядит так:
using System.Windows;
namespace ProgramB {
public partial class MainWindow : Window {
public MainWindow() {
InitializeComponent();
}
}
}
XML для ProgramA и ProgramB содержит ссылку на MyUserControl:
<Window x:Class="ProgramB.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525"
xmlns:my="clr-namespace:MyUserControl;assembly=MyUserControl">
<Grid>
<my:UserControl1 Name="userControl11"
HorizontalAlignment="Left"
VerticalAlignment="Top" />
</Grid>
</Window>
Я добавил класс в проект ProgramB под названием NewFoo.cs, и он выглядит так:
using System.Diagnostics;
using MyLibrary;
namespace ProgramB {
class NewFoo : MyLibrary.Foo{
override public void Bar() {
Debug.WriteLine(" Hi from ProgramB Foo, method Bar.");
}
}
}
ProgramB компилируется и запускается, но вывод:
MyUserControl:
Hi from library Foo, method Bar.
Переопределение не сработало.
Вот проблема. Пространство имен для метода FB в ProgramB - это ProgramB, и, следовательно, оно не переопределяет метод Bar в MyLibrary.
Есть ли способ, которым ProgramB может переопределить метод Bar, используемый MyUserControl?
Любая помощь или предложения будут с благодарностью.
Charles