簡體   English   中英

如何將Java語法轉換為C#的Myclass obj=new Myclass(){ public override mymethod() }

[英]How to convert Java Syntax to C# of Myclass obj=new Myclass(){ public override mymethod() }

我想將 Java 代碼轉換為 C# 但面臨着這樣做的問題

public class MyService extends Service {

  static final String CONNECTIVITY_CHANGE_ACTION = "android.net.conn.CONNECTIVITY_CHANGE";
  NotificationManager manager ;

@Nullable
@Override
public IBinder onBind(Intent intent) {
    return null;
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    // Let it continue running until it is stopped.
    Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show();
    IntentFilter filter = new IntentFilter();
    filter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
    BroadcastReceiver receiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if (CONNECTIVITY_CHANGE_ACTION.equals(action)) {
                //check internet connection
                if (!ConnectionHelper.isConnectedOrConnecting(context)) {
                    if (context != null) {
                        boolean show = false;
                        if (ConnectionHelper.lastNoConnectionTs == -1) {//first time
                            show = true;
                            ConnectionHelper.lastNoConnectionTs = System.currentTimeMillis();
                        } else {
                            if (System.currentTimeMillis() - ConnectionHelper.lastNoConnectionTs > 1000) {
                                show = true;
                                ConnectionHelper.lastNoConnectionTs = System.currentTimeMillis();
                            }
                        }

                        if (show && ConnectionHelper.isOnline) {
                            ConnectionHelper.isOnline = false;
                            Log.i("NETWORK123","Connection lost");
                            //manager.cancelAll();
                        }
                    }
                } else {
                    Log.i("NETWORK123","Connected");
                    showNotifications("APP" , "It is working");
                    // Perform your actions here
                    ConnectionHelper.isOnline = true;
                }
            }
        }
    };
    registerReceiver(receiver,filter);
    return START_STICKY;
}

@Override
public void onDestroy() {
    super.onDestroy();
    Toast.makeText(this, "Service Destroyed", Toast.LENGTH_LONG).show();
}
}

這部分我沒有得到代碼中間的內容

BroadcastReceiver receiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent)
    {

    }
};

你會做這樣的事情

var receiver = new MyReceiver();

public class MyReceiver : BroadcastReceiver
{
    public override void onReceive(Context context, Intent intent)
    {

    }
}

由於 C# 不允許匿名類,因此您必須顯式創建它,然后從此類傳遞您需要的數據。

[BroadcastReceiver(Enabled = true, Exported = false)]
public class SampleReceiver : BroadcastReceiver
{
   public override void OnReceive(Context context, Intent intent)
   {
    // Do stuff here.
   }
}

然后像這樣使用它:

var receiver = new SampleReceiver();

您可能希望看到更全面的答案,以了解給定的建議如何組合在一起:

public class MyService : Service
{
  internal const string CONNECTIVITY_CHANGE_ACTION = "android.net.conn.CONNECTIVITY_CHANGE";
  internal NotificationManager manager;

  public override IBinder onBind(Intent intent)
  {
    return null;
  }

  public override int onStartCommand(Intent intent, int flags, int startId)
  {
    // Let it continue running until it is stopped.
    Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show();
    IntentFilter filter = new IntentFilter();
    filter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
    BroadcastReceiver receiver = new BroadcastReceiverAnonymousInnerClass();
    registerReceiver(receiver,filter);
    return START_STICKY;
  }

  private class BroadcastReceiverAnonymousInnerClass : BroadcastReceiver
  {
      public override void onReceive(Context context, Intent intent)
      {
          string action = intent.Action;
          if (CONNECTIVITY_CHANGE_ACTION.Equals(action))
          {
              //check internet connection
              if (!ConnectionHelper.isConnectedOrConnecting(context))
              {
                  if (context != null)
                  {
                      bool show = false;
                      if (ConnectionHelper.lastNoConnectionTs == -1)
                      { //first time
                          show = true;
                          ConnectionHelper.lastNoConnectionTs = DateTimeHelper.CurrentUnixTimeMillis();
                      }
                      else
                      {
                          if (DateTimeHelper.CurrentUnixTimeMillis() - ConnectionHelper.lastNoConnectionTs > 1000)
                          {
                              show = true;
                              ConnectionHelper.lastNoConnectionTs = DateTimeHelper.CurrentUnixTimeMillis();
                          }
                      }

                      if (show && ConnectionHelper.isOnline)
                      {
                          ConnectionHelper.isOnline = false;
                          Log.i("NETWORK123","Connection lost");
                          //manager.cancelAll();
                      }
                  }
              }
              else
              {
                  Log.i("NETWORK123","Connected");
                  showNotifications("APP", "It is working");
                  // Perform your actions here
                  ConnectionHelper.isOnline = true;
              }
          }
      }
  }

  public override void onDestroy()
  {
    base.onDestroy();
    Toast.makeText(this, "Service Destroyed", Toast.LENGTH_LONG).show();
  }
}

internal static class DateTimeHelper
{
    private static readonly System.DateTime Jan1st1970 = new System.DateTime(1970, 1, 1, 0, 0, 0, System.DateTimeKind.Utc);
    public static long CurrentUnixTimeMillis()
    {
        return (long)(System.DateTime.UtcNow - Jan1st1970).TotalMilliseconds;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM