[英]Declaring an object of C# struct
我是C#的新手。 來自純C / C ++背景。 因此,如果我的問題很簡單,請對我輕松一點。
我正在嘗試聲明一個結構Abc的對象,該對象抱怨編譯錯誤,如下所示,這意味着該對象obj無法識別。
string mains1 = obj.s1;
錯誤CS0120:非靜態字段,方法或屬性'csharp1.Program.obj'需要對象引用
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
namespace csharp1
{
class Program
{
public struct Abc
{
public string s1;
};
Abc obj = new Abc();;
static void Main(string[] args)
{
System.Console.WriteLine("start main");
string cwd = Directory.GetCurrentDirectory();
string fileName = "Myfile.xml";
string destFile = System.IO.Path.Combine(cwd, fileName);
string inpFile = "MyfileINP.xml";
string inpDir = System.IO.Path.Combine(cwd, "SubDir");
string srcfile = System.IO.Path.Combine(inpDir,inpFile);
File.Copy(srcfile, destFile, false);
string mains1 = obj.s1;
}
}
}
不知道這里是什么錯誤。
這是在抱怨,因為您正嘗試從靜態上下文Main方法訪問非靜態實例“ obj”,所以有多種方法可以解決該問題,您可以使該實例也像“ static Abc obj = new Abc()”一樣靜態或您可以在Main方法中移動該聲明,也可以創建Program類的實例,然后使用該實例。
方法1:
static Abc obj = new Abc();
static void Main(string[] args)
{
System.Console.WriteLine("start main");
//
string mains1 = obj.s1;
}
方法2:
static void Main(string[] args)
{
Abc obj = new Abc();
System.Console.WriteLine("start main");
//
string mains1 = obj.s1;
}
方法3:
Abc obj = new Abc();
static void Main(string[] args)
{
System.Console.WriteLine("start main");
//
string mains1 = new Program().obj.s1;
}
在沒有其他選擇之前,始終到處都是“靜態”不是一個好習慣,使static允許在該類的所有實例之間共享該對象,因此在我們真正需要它之前不是一件好事。
您需要先創建包含類Program
的實例,然后才能訪問它的成員,例如
string mains1 = new Program().obj.s1;
您正在嘗試從Main
(靜態方法)內部訪問obj
(非靜態方法)。 因此,您正在獲得CS0120
。 我建議將Abc obj = new Abc()
更改為static ABC obj = new Abc()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.