簡體   English   中英

聲明C#結構的對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM