Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么可以';我不能从应用程序中的另一个类调用这个公共方法吗?_C#_Xamarin_Xamarin.forms - Fatal编程技术网

C# 为什么可以';我不能从应用程序中的另一个类调用这个公共方法吗?

C# 为什么可以';我不能从应用程序中的另一个类调用这个公共方法吗?,c#,xamarin,xamarin.forms,C#,Xamarin,Xamarin.forms,我添加了一个公共方法来返回变量pageLoaded,但是visual studio显示了这个错误“MainPage.pageLoaded()方法需要对象引用,而不是静态的”。逻辑是仅当pageLoaded为true时才完成启动活动。如果有人对此有更好的想法,我很高兴知道,我刚刚开始学习C#/Xamarin 我的代码: namespace MyApp { public partial class MainPage : ContentPage { private bo

我添加了一个公共方法来返回变量pageLoaded,但是visual studio显示了这个错误“MainPage.pageLoaded()方法需要对象引用,而不是静态的”。逻辑是仅当pageLoaded为true时才完成启动活动。如果有人对此有更好的想法,我很高兴知道,我刚刚开始学习C#/Xamarin

我的代码:

namespace MyApp
{
    public partial class MainPage : ContentPage
    {
        private bool pageLoaded = false;
        public MainPage()
        {
            InitializeComponent();
            webnav.HeightRequest = 1000;
            webnav.WidthRequest = 1000;
            webnav.Source = "https://www.example.com";
        }

        public void Webnav_Navigated(object sender, WebNavigatedEventArgs e)
        {
            pageLoaded = true;
        }

        public bool PageLoaded()
        {
            return pageLoaded;
        }
    }
}
代码2:

...
...
using MyApp;
namespace MyApp.Droid
{
    [Activity(Label = "My App", Icon = "@mipmap/icon", Theme = "@style/MainTheme", MainLauncher = false, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
    public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
    {
        protected override void OnCreate(Bundle savedInstanceState)
        {
            TabLayoutResource = Resource.Layout.Tabbar;
            ToolbarResource = Resource.Layout.Toolbar;

            base.OnCreate(savedInstanceState);
            global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
            LoadApplication(new App());
            while (true)
            {
                if (MainPage.PageLoaded())
                {
                    SplashScreen.fa.Finish();
                    break;
                }
            }
        }
   }
}

由于MainPage类不是静态的,因此需要创建MainPage类的对象,并使用该对象从该类调用方法。

问题:

您的
.PageLoaded()
方法是一个实例方法。只能在类型为
MainPage

您在启动屏幕中对它的引用试图将其作为静态方法调用,这有两个问题:

  • 如上所述,您没有使用
  • 即使您将其定义为静态,它也不会告诉您任何关于加载真实页面的信息
  • 解决方案:

    不要这样做。从知道何时加载的页面实例控制启动屏幕的可见性。从
    MainPage

    编辑:

    为了进一步澄清这一区别:

    // calling a method against the static definition of the class
    MainPage.PageLoaded();
    // calling a method against an instance of the class
    new MainPage().PageLoaded();
    

    上面的代码不是一个解决方案,而是一个实例方法和静态方法之间差异的示例。您的
    PageLoaded
    方法不应该是静态的,因为您已经将所有内容都安排好了。

    关于静态与实例的问题,您是正确的。不幸的是,在他的活动中创建另一个
    MainPage
    实例并不能解决这个特殊问题,也不能解决实例与静态方法之间的误解。我只是试图通过手机帮助他解决错误,没有教他最佳实践。人们现在无缘无故地投票了。谢谢你的回答。如果你允许的话,我还有一个问题。显示主页上的启动屏幕。会是一个有效的splashscreen吗?我的意思是,启动屏幕不是作为一种活动,一种“本地”的特性来引导负载吗?