我正在潜入Android开发。我参与的大多数项目都是用 C# 编写的。代表是我经常使用的 C# 元素,我也使用过一些东西,比如使用扩展 EventArgs 的类或使用 set 和 get 的属性传递数据。凭借我的编程知识,我想我将能够非常顺利地开始 Android 开发。问题是我完全不知道如何处理类似于 Java 中的 C# delagte 的实现机制。
下面我将介绍一些在 C# 中运行良好的示例类,其中包含一些我想在未来的 Android 项目中使用的 C# 语言元素。有人可以为我提供此代码的翻译吗?我更喜欢使用我自己的示例,它的转换将使我能够更快地捕捉到它。此外,关于该主题的任何有价值的资源(不仅是代表,还有将 C# 转换为 Java 的一般主题)都会受到赞赏。
倒计时计时器.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace SampleDelegateApp
{
    public class CountdownTimer
    {
        Timer tmrTicks = new Timer();
        int secondsLeft = 0;
        int numberOfSecondsToCountdown = 0;
        public bool IsWorking
        {
            get { return tmrTicks.Enabled; }
        }
        public CountdownTimer(int seconds)
        {
            if (secondsLeft < 0) secondsLeft = 0; 
            numberOfSecondsToCountdown = seconds;
            secondsLeft = seconds;
            tmrTicks.Interval = 1000;
            tmrTicks.Tick += new EventHandler(tmrTicks_Tick);
            tmrTicks.Enabled = false;
        }
        void tmrTicks_Tick(object sender, EventArgs e)
        {
            secondsLeft--;
            if (secondsLeft >= 1) 
                WhenCountdownTimerTick(new CountdownTimerEventArgs(secondsLeft, numberOfSecondsToCountdown, false));
            else
            {
                Stop();
                WhenCountdownTimerTick(new CountdownTimerEventArgs(secondsLeft, numberOfSecondsToCountdown, true));
            }
        }
        public void Reset()
        {
            Stop();
            secondsLeft = numberOfSecondsToCountdown;
            if (secondsLeft < 0) secondsLeft = 0;
            WhenCountdownTimerTick(new CountdownTimerEventArgs(secondsLeft, numberOfSecondsToCountdown, false));
        }
        public void Stop()
        {
            tmrTicks.Enabled = false;
        }
        public void Start()
        {
            if (secondsLeft <= 0)
            {
                secondsLeft = 0;
                WhenCountdownTimerTick(new CountdownTimerEventArgs(secondsLeft, numberOfSecondsToCountdown, true));
            }
            else
            {
                tmrTicks.Enabled = true;
            }
        }
        public delegate void CountdownTimerTickEventHandler(object sender, CountdownTimerEventArgs ea);
        public event CountdownTimerTickEventHandler CountdownTimerTick;
        protected virtual void WhenCountdownTimerTick(CountdownTimerEventArgs ea)
        {
            if (CountdownTimerTick != null)
            {
                CountdownTimerTick(this, ea);
            }
        }
    }
    public class CountdownTimerEventArgs : EventArgs
    {
        public string timeString = "";
        public float procentOfTimeLeft = 0.0f;
        public bool countdownFinished = false;
        public CountdownTimerEventArgs(int secondsLeft, int SecondsToCountdown, bool isfinished)
        {
            countdownFinished = isfinished;
            timeString = string.Format("{0:00}:{1:00}", secondsLeft / 60, secondsLeft % 60);
        }
    }
}
frmTest.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace SampleDelegateApp
{
    public partial class frmTest : Form
    {
        CountdownTimer ctmrTest;
        public frmTest()
        {
            InitializeComponent();
            ctmrTest = new CountdownTimer(-44);
            ctmrTest.CountdownTimerTick += new CountdownTimer.CountdownTimerTickEventHandler(ctmrTest_CountdownTimerTick); 
        }
        void ctmrTest_CountdownTimerTick(object sender, CountdownTimerEventArgs ea)
        {
            lblTimer.Text = ea.timeString;
            if (ea.countdownFinished) countdownEnd();
        }
        private void btnStart_Click(object sender, EventArgs e)
        {
            ctmrTest.Reset();
            ctmrTest.Start();
        }
        void countdownEnd()
        {
            MessageBox.Show("Finish");
        }
    }
}