我已经弄清楚了这个问题 – 这是我在java内部类中使用时对关键字static的误解.我认为静态意味着传统意义上的静态 – 就像c#一样.在Java的情况下,静态内部类具有略微不同的含义.我个人会使用除静态之外的其他关键字来达到相同的效果以消除混淆.
这里有几个很好的链接,解释了静态内部类在java中的含义.
link1
link2
对不起发送每个人的野鹅追逐:)
原帖
在java中我可以编写以下内容:
public class UseStaticmembers { private Holder holder; holder.txt1 = "text"; holder.txt2 = "text"; CallSomeMethod(holder);}static class Holder { public string txt1; public string txt2;}
但我不能用C#做到这一点.我收到以下错误:“无法在行上声明静态类型’Holder’的变量”:“private Holder holder;”
如何在C#中实现相同的效果(如果可以的话).
更新#1
以下是此模式如何用于优化自定义列表适配器的示例.如您所见,我不能通过静态类名访问静态成员,但需要通过变量引用它.它需要传递给Tag.
public class WeatherAdapter extends ArrayAdapter<Weather>{Context context; int layoutResourceID; Weather data[] = null;public WeatherAdapter(Context context,int layoutResourceID,Weather[] data) { super(context,layoutResourceID,data); this.layoutResourceID = layoutResourceID; this.context = context; this.data = data;}@OverrIDepublic VIEw getVIEw(int position,VIEw convertVIEw,VIEwGroup parent) { VIEw row = convertVIEw; WeatherHolder holder = null; if(row == null) { LayoutInflater inflater = ((Activity)context).getLayoutInflater(); row = inflater.inflate(layoutResourceID,parent,false); holder = new WeatherHolder(); holder.imgIcon = (ImageVIEw)row.findVIEwByID(R.ID.imgIcon); holder.txtTitle = (TextVIEw)row.findVIEwByID(R.ID.txtTitle); row.setTag(holder); } else { holder = (WeatherHolder)row.getTag(); } Weather weather = data[position]; holder.txtTitle.setText(weather.Title); holder.imgIcon.setimageResource(weather.icon); return row;}static class WeatherHolder{ ImageVIEw imgIcon; TextVIEw txtTitle;}
}
解决方法 因为您无法在C#中创建静态类型的实例.您可以直接在c#中访问静态类型的方法和属性.
访问静态类成员
Staticclass.Propetyname;Staticclass.methodname();
静态类
public static Staticclass{ public type Propetyname { get ; set; } public type methodname() { // code return typevariable; }}
因此,不需要创建静态类型的实例,根据C#语言语法,这是非法的.
总结以上是内存溢出为你收集整理的在c#中声明静态类型的成员全部内容,希望文章能够帮你解决在c#中声明静态类型的成员所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)