لا يمكن استخدام فئة متغيرة معلنة في الوظيفة داخل نفس الفئة. لماذا ا ؟
-
28-09-2019 - |
سؤال
لقد أعلنت متغيرًا في الفصل "الرئيسي" مع الاسم "Context2". لكن لا يمكنني استخدام المتغير داخل الوظيفة "main_load". ما الخطأ الذي افعله ؟
using System;
using System.Windows.Forms;
using Soapi;
using Soapi.Domain;
namespace SO_Console_Client
{
public partial class Main : Form
{
const string apiKey = "*************";
var context2 = new ApiContext(apiKey).Initialize(false);
public Main(String GravatarURL, User user)
{
InitializeComponent();
pictureBox1.Load(GravatarURL); //Loads the Gravatar image from the url
//set the reputation details
lblRep.Text = String.Format("Reputation: {0}", user.Reputation);
//Sets the badge details
lblBadge.Text = String.Format("Badges: gold={0} silver={1} bronze={2}", user.BadgeCounts.Gold, user.BadgeCounts.Silver, user.BadgeCounts.Bronze);
groupBox1.Text = user.DisplayName.ToString();
}
private void Main_Load(object sender, EventArgs e)
{
Soapi.Queries.QuestionsUnansweredQuery query = context2.Official.StackOverflow.Questions.Unanswered;
foreach (Question q in query)
{
try
{
Console.WriteLine(q.Title.ToString());
//Console.WriteLine(q.Body.ToString());
}
catch (System.NullReferenceException ex)
{
}
}
}
}
}
المحلول
الكتابة الضمنية لا تعمل مع الحقول ؛ إنه يعمل فقط مع المتغيرات المحلية.
أنا فكر في هذا ما نيتك الحقيقية هي:
ApiContext context2 = new ApiContext(apiKey);
public Main(String GravatarURL, User user)
{
context2.Initialize(false);
...
}
في حالة من غير المرجح للغاية ذلك ApiContext
هو نوع من الواجهة بطلاقة ApiContext.Initialize(bool)
إرجاع أ مختلفApiContext
كائن ، يجب أن يكون هذا ما تريده:
ApiContext context2 = new ApiContext(apiKey).Initialize(false);
على الرغم من أنه سيكون أكثر وضوحًا إذا فعلت:
ApiContext context2;
public Main(String GravatarURL, User user)
{
context2 = new ApiContext(apiKey).Initialize(false);
...
}
أنا حقا أشك في ذلك ، رغم ذلك.
نصائح أخرى
هذا لا يمكن تجميع. var
-لا يمكن أن تكون الإعلانات المتغيرة من النوع على مستوى الفصل ، فقط مستوى الطريقة.
هناك مشكلات فنية مع السماح باستخدام VAR مع الحقول. هذا هو السبب في أنه يجب تحديد نوع ملموسة. فيما يلي تفسير للقضايا من إريك ليبرت:
لا تنتمي إلى StackOverflow