1
我有类似下面的抽象类,转换与基类的抽象类到界面C#
public abstract class YouTubeFailureRecoveryActivity : YouTubeBaseActivity, IYouTubePlayerOnInitializedListener
{
private static int RECOVERY_DIALOG_REQUEST = 1;
public void OnInitializationFailure(IYouTubePlayerProvider provider, YouTubeInitializationResult errorReason)
{
if (errorReason.IsUserRecoverableError)
{
errorReason.GetErrorDialog(this, RECOVERY_DIALOG_REQUEST).Show();
}
else
{
String errorMessage = String.Format(GetString(Resource.String.error_player), errorReason.ToString());
Toast.MakeText(this, errorMessage, ToastLength.Long).Show();
}
}
public virtual void OnInitializationSuccess(IYouTubePlayerProvider provider, IYouTubePlayer player, bool wasRestored)
{
//throw new NotImplementedException();
}
protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
//base.OnActivityResult (requestCode, resultCode, data);
if (requestCode == RECOVERY_DIALOG_REQUEST)
GetYouTubePlayerProvider().Initialize(KeyKeeper.YOUTUBE_API_KEY, this);
}
protected abstract IYouTubePlayerProvider GetYouTubePlayerProvider();
}
我想转换成一个接口,这样我可以做到以下几点,
public class foo : INewInterface
{
//implement all the methods in the above abstract class
}
这挑战了我的面向对象的理解,我无法找出解决方案,我总结自己说这是不可能的,但想到在这里发布它来确认它或找到可能的解决方案(如果有的话)。
如果你说没可能你有什么依据? – CodeNotFound
你为什么要改变它到一个界面?你可以做和现在一样的事情。 – AntiTcb
您不能强制实现接口的类必须从抽象类继承。但你不应该需要。抽象类应该已经实现了一个接口并通过它来使用,而不是“直接”使用。因此,您可以轻松地让您的新界面从该界面继承(可能还有其他几个界面)。现在,每个实现新界面的类都可以自由地实现它,但是它需要。包括但不限于从抽象基类继承。 – Corak