Xamarin.Forms中无法在其他类引用App类公共变量的问题
解决Xamarin.Forms中CS0120: 非静态字段需要对象引用的错误
你遇到的这个错误其实很常见,核心问题出在成员访问的方式不对:你的productsJSON是App类的非静态公共字段,而你试图直接用App.productsJSON这种"类名.成员名"的方式访问——这种写法只适用于静态成员,非静态成员必须通过类的实例来调用。
在Xamarin.Forms中,获取当前正在运行的App实例有标准的方式,就是用Application.Current,然后把它强制转换成你的自定义App类型,这样就能访问你定义的实例成员了。
修改你的ProductsPage.xaml.cs代码如下:
public ProductsPage(string title) { InitializeComponent(); Title = title; // 替换原来的错误写法 var currentAppInstance = (App)Application.Current; string productsJSON = currentAppInstance.productsJSON; displayProducts(productsJSON); }
为什么网上的例子可以用"类名.属性名"?
你看到的那些示例里,目标成员一定是被标记为static的静态成员。如果你确实想通过App.productsJSON直接访问,也可以把App类里的字段改成静态的:
// 在App.xaml.cs里修改字段定义 public static string productsJSON = {{very large string}}; public static List<Product> jsonDataCollection = new List<Product>();
不过要注意:静态成员属于类本身,而不是实例,在Xamarin.Forms的App场景下,用Application.Current获取实例的方式更符合框架设计,也能避免静态成员可能带来的生命周期和线程安全问题(比如多个实例的冲突,不过App一般只有一个实例,但养成好习惯总是没错的)。
内容的提问来源于stack exchange,提问作者PaningningPH
相关产品推荐
相关产品推荐

