Если Вы хотите переопределить метод базового класса, он должен быть объявлен как virtual
. Метод переопределения в производном классе должен быть явно объявлен как override
. Это должно работать:
public class BaseObject
{
protected virtual String getMood()
{
return "Base mood";
}
//...
}
public class DerivedObject: BaseObject
{
protected override String getMood()
{
return "Derived mood";
}
//...
}
Редактирование: я просто попробовал его в c# консольном приложении, и это компилирует. Таким образом, исходный код, который Вы используете, должен отличаться по некоторой крошечной, но важной части от того, что Вы отправили здесь.
Мой program.cs - это:
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
// leaving out your implementation to save space...
}
}
public class SadObject : MoodyObject
{
protected override String getMood()
{
return "sad";
}
//specialization
public void cry()
{
Console.WriteLine("wah...boohoo");
}
}
public class HappyObject : MoodyObject
{
protected override String getMood()
{
return "happy";
}
public void laugh()
{
Console.WriteLine("hehehehehehe.");
}
}
}
Вы должны создать новую цель Loadable Bundle , которая содержит ваши перья и ваш код Какао. Добавьте пакетный продукт на этап Копирование ресурсов пакета вашего подключаемого модуля. Тогда код для подключаемого модуля фильтра, который загружает окно Какао с некоторыми элементами управления, будет выглядеть следующим образом:
Boolean DoUI (void) {
// Create the CF Cocoa bundle
CFBundleRef pluginBundle;
CFURLRef cocoaBundleURL;
pluginBundle = CFBundleGetBundleWithIdentifier(CFSTR("com.example.plugin"));
cocoaBundleURL = CFBundleCopyResourceURL(pluginBundle,
CFSTR("Cocoa_bundle"),
CFSTR("bundle"),
NULL);
CFBundleRef cocoaBundleRef;
cocoaBundleRef = CFBundleCreate(kCFAllocatorDefault, cocoaBundleURL);
CFRelease(cocoaBundleURL);
// start Cocoa (for CS3)
NSApplicationLoad();
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
// load the cocoa bundle by identifier
NSBundle* cocoaBundle;
cocoaBundle = [NSBundle bundleWithIdentifier:@"com.example.plugin.cocoa"];
// load the window controller from the bundle
Class testControllerClass;
testControllerClass = [cocoaBundle classNamed:@"MyWindowController"];
MyWindowController* winController = [[testControllerClass alloc] init];
[NSApp runModalForWindow:[winController window]];
[[winController window] performClose:nil];
[winController release];
// release the bundle
CFRelease(cocoaBundleRef);
[pool release];
return 1;
}
Это основано на трюке с пакетом Craig Hockenberry . Я все еще тестирую его, но он должен работать как на CS3, так и на CS4.
Я только начал работать над написанием плагина на основе Какао для CS4. На самом деле, информации по этой теме почти нет, и я выяснял это по ходу дела.
Я был программистом на Java и Ruby в течение 10 лет, поэтому мой файл C / C ++ заржавел, и я только изучаю Objective C как я иду. На всякий случай я наткнулся на две "ловушки" ....