Создайте объект из класса абстрактных типов в Xamarin.iOS
В моем проекте связывания Xamarin.iOS у меня есть сгенерированный класс с именем LSMAUsecase.g.cs
, Ниже приводится содержание этого класса.
namespace SightCallBinding {
[Protocol (Name = "LSMAUsecase", WrapperType = typeof (LSMAUsecaseWrapper))]
[ProtocolMember (IsRequired = true, IsProperty = true, IsStatic = false, Name = "Name", Selector = "name", PropertyType = typeof (string), GetterSelector = "name", ArgumentSemantic = ArgumentSemantic.None)]
public interface ILSMAUsecase : INativeObject, IDisposable
{
[Preserve (Conditional = true)]
string Name {
[Export ("name")]
get;
}
}
internal sealed class LSMAUsecaseWrapper : BaseWrapper, ILSMAUsecase {
[Preserve (Conditional = true)]
public LSMAUsecaseWrapper (IntPtr handle, bool owns)
: base (handle, owns)
{
}
[BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)]
public string Name {
[Export ("name")]
get {
return NSString.FromHandle (global::ApiDefinitions.Messaging.IntPtr_objc_msgSend (this.Handle, Selector.GetHandle ("name")));
}
}
}
}
namespace SightCallBinding {
[Protocol()]
[Register("LSMAUsecase", false)]
[Model]
public unsafe abstract partial class LSMAUsecase : NSObject, ILSMAUsecase {
[BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)]
[EditorBrowsable (EditorBrowsableState.Advanced)]
[Export ("init")]
protected LSMAUsecase () : base (NSObjectFlag.Empty)
{
IsDirectBinding = false;
InitializeHandle (global::ApiDefinitions.Messaging.IntPtr_objc_msgSendSuper (this.SuperHandle, global::ObjCRuntime.Selector.GetHandle ("init")), "init");
}
[BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)]
[EditorBrowsable (EditorBrowsableState.Advanced)]
protected LSMAUsecase (NSObjectFlag t) : base (t)
{
IsDirectBinding = false;
}
[BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)]
[EditorBrowsable (EditorBrowsableState.Advanced)]
protected internal LSMAUsecase (IntPtr handle) : base (handle)
{
IsDirectBinding = false;
}
[BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)]
public abstract string Name {
[Export ("name")]
get;
}
} /* class LSMAUsecase */
}
Я хочу пройти LSMaUsecase
возражать против метода. Но я не могу создать какой-либо объект из этого, так как это абстрактный класс. И я не могу даже привести в LSMAUsecase тип. Это говорит, недействительный актерский состав. Есть ли способ решить это Как я могу передать этот тип объекта. Ниже приведен связанный метод в интерфейсе.
[BindingImpl(BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)]
[Export("sendInvitationForUsecasePhone:toPhone:withReference:andNotify:")]
[Preserve(Conditional = true)]
void SendInvitationForUsecasePhone(LSMAUsecase usecase, string phoneNumber, string reference, [BlockProxy(typeof(NIDActionArity2V0))] Action<LSMAPincodeStatus_t, NSString> block);
ОБНОВИТЬ
Это мой расширенный класс
public class Usecase : LSMAUsecase
{
public override string Name { get; }
public Usecase()
: base()
{
}
}
Затем я получаю это исключение, поскольку у меня нет никакого значения для "имени"(имя - только для получения).
Foundation.MonoTouchException: выброшено исключение Objective C. Имя: NSInvalidArgumentException Причина: -[LSMAHandler sendInvitationForUsecasePhone:toPhone:withReference:andNotify:]: нераспознанный селектор, отправленный экземпляру 0x282458780