2013-08-18 3 views

ответ

1

Вы можете использовать методы расширения. Эти функции, как представляется, являются функциями расширенного класса, но между ними нет реальной связи. Тем не менее, они делают программирование более удобным.
http://msdn.microsoft.com/en-us/library/bb384936.aspx

Update: Давайте посмотрим пример. Обратите внимание, что это фрагменты из 3-х файлов.

'Noninheritable baseclass 
Public NotInheritable Class BaseClass 
    Function f() 
     Return 42 
    End Function 
End Class 

'Extension 
Imports System.Runtime.CompilerServices 
Module ExtModule 
    <Extension()> 
    Public Sub Print(ByVal bc As BaseClass) 
     Console.WriteLine(bc.f()) 
    End Sub 
End Module 

'Usage 
Sub Main() 
    Dim bc As BaseClass 
    bc = New BaseClass() 
    bc.Print() 'Calling the extension method 
End Sub 

И он говорит 42.

+0

Вы не можете расширить классы NotInheritable, AFAIK –

+0

Работает. Официальные ребята не упоминают такую ​​проблему в [их блоге] (http://blogs.msdn.com/b/vbteam/archive/2007/03/10/extension-methods-best-practices-extension-methods-part -6.aspx). Есть некоторые ограничения, но я не нашел ничего сложного. –

+0

Попробуйте расширить 'Path', и вы увидите. OP хочет расширить «путь», в частности. Проблема заключается в том, что методы расширения работают с экземплярами, и вы не можете создать экземпляр «Путь». –

0

Проблема не в наследовании класса «система», но NonInheritable один, который по своей конструкции и, как следует из названия, не наследуется.

Почему вы все равно хотите наследовать его? Вы расширяете (наследуете) класс, чтобы добавить поведение к его экземплярам. В случае с Path нет экземпляров, Path - это просто «контейнер» для группировки аналогичных методов, связанных с манипуляцией с файловой системой.

Что вы должны сделать, так это создать Module для ваших дополнительных методов или собственного класса NotInheritable.

+0

Inherting был единственным способом, которым я пытался расширить функциональность System.IO.Path. Я хочу добавить свою функцию «bla()» в класс Path, потому что я не хочу иметь другой класс для этой функции bla(). – MaBi

+0

@MaBi Ваш вопрос: «Можно ли расширить системный класс?», Я предположил, что «расширение» означает «наследование», «подклассификация», как это понимают большинство программистов ООП. Я обновил ответ на основе вашего комментария. –

+0

спасибо за обновление вашего ответа! – MaBi