2016-04-30 49 views
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 
} 

这挑战了我的面向对象的理解,我无法找出解决方案,我总结自己说这是不可能的,但想到在这里发布它来确认它或找到可能的解决方案(如果有的话)。

+0

如果你说没可能你有什么依据? – CodeNotFound

+0

你为什么要改变它到一个界面?你可以做和现在一样的事情。 – AntiTcb

+0

您不能强制实现接口的类必须从抽象类继承。但你不应该需要。抽象类应该已经实现了一个接口并通过它来使用,而不是“直接”使用。因此,您可以轻松地让您的新界面从该界面继承(可能还有其他几个界面)。现在,每个实现新界面的类都可以自由地实现它,但是它需要。包括但不限于从抽象基类继承。 – Corak

回答

0

从您提供给我们的信息,这是你能做的一切:

public interface INewInterface 
{ 
    void OnInitializationFailure(IYouTubePlayerProvider provider, YouTubeInitializationResult errorReason); 
    void OnInitializationSuccess(IYouTubePlayerProvider provider, IYouTubePlayer player, bool wasRestored); 
} 
+0

谢谢!我会尝试这一个。 –