Протоколы на самом деле просто встроены в ваш интерфейс, так что вы можете либо просто встроить свойства непосредственно в ваш класс, либо вы можете иметь встроенный генератор для них.
// Notice the lack of [BaseType] attribute on this one
interface GRGrabbaPreferencesProtocol {
[Export ("baseName")]
string BaseName { get; }
}
[BaseType (typeof (NSObject))]
interface GRGrabbaPreferences : GRGrabbaPreferencesProtocol {
[Export ("barcode")]
GRGrabbaBarcodePrefs Barcode { get; }
}
[BaseType (typeof (NSObject))]
interface GRGrabbaBarcodePrefs : GRGrabbaPreferencesProtocol {
}
Вышеуказанное идентично:
[BaseType (typeof (NSObject))]
interface GRGrabbaPreferences : GRGrabbaPreferencesProtocol {
[Export ("baseName")]
string BaseName { get; }
[Export ("barcode")]
GRGrabbaBarcodePrefs Barcode { get; }
}
[BaseType (typeof (NSObject))]
interface GRGrabbaBarcodePrefs : GRGrabbaPreferencesProtocol {
[Export ("baseName")]
string BaseName { get; }
}
Более практично позволить генератору взять на себя вкладку, чтобы избежать ошибок и проблем вырезания / вставки. Но обратите внимание, что GRGrabbaPreferencesProtocol не экспортируется в C # в любой форме.