C#匿名方法实现Java匿名类功能

来源:互联网 发布:淘宝如何设置全屏海报 编辑:程序博客网 时间:2024/05/21 07:10

Java选手写C#,虽说语法很像,但是C#中没有匿名类,有时候感觉还是挺别扭的。但是C#有匿名方法(lambda表达式),替代Java的匿名类。
Java代码:

public class Test {    public void getItem(int position, ViewHolder viewHolder) {        final int pos = position;        viewHolder.setOnDataChangeListener(new OnDataChangeListener() {            @Override            public void onChange(int index) {                System.out.print(index + pos);            }        });    }    public interface OnDataChangeListener {        void onChange(int index);    }    public class ViewHolder {        private OnDataChangeListener onDataChangeListener;        public void setOnDataChangeListener(OnDataChangeListener onDataChangeListener) {            this.onDataChangeListener = onDataChangeListener;        }    }}

C#代码:

 public class Test    {        public void getItem(int position, ViewHolder viewHolder)        {            int pos = position;//            viewHolder.SetListener(OnDataChangeListener);            viewHolder.SetListener(index => { Console.WriteLine(pos + index); });        }        private void OnDataChangeListener(int index)        {            //这里面怎么获取pos?        }        public class ViewHolder        {            public delegate void OnDataChangeListener(int index);            private OnDataChangeListener _onDataChangeListener;            public void SetListener(OnDataChangeListener _listener)            {                _onDataChangeListener = _listener;            }        }    }

java代码如果接口中有两个方法:

public class Test {    ...    public OnChangeLister onChangeLister = new OnChangeLister() {        @Override        public void onStart() {            Test.this.onChangeLister = null;        }        @Override        public void onFinish() {        }    };    public interface OnChangeLister {        void onStart();        void onFinish();    }}

Java中可以通过匿名内部类来实现,并把几个方法都封装到一个接口中;但是C#中没有内部类可以持有外部类的引用的概念,所以实现起来没有java方便,当然也可以使用匿名方法实现,但是封装性没有Java用接口好。

以上是关于Java匿名类在C#中实现的一些认识。

原创粉丝点击