【问题标题】:How to define get and set methods如何定义get和set方法
【发布时间】:2016-12-09 13:26:47
【问题描述】:

非常感谢,非常感谢您的帮助。它使我意识到我必须学习多少。这是我想要设定的方向,并调整你的例子来反映这一点。但是,它现在要求 ;在我的静态 void Main 的末尾......即使我以前从未添加过这个,它要求声明主体 extern,abstract。它也不允许我在 Main 中设置链接,我使用以下语法 gh.setName("Great Hall"); gh.setN(博士);为了设置大厅和客厅之间的北连接。任何的想法?

private string RoomName;
        private Room N = null;
        private Room E = null;
        private Room S = null;
        private Room W = null;

        public Room X { get; private set; }

        public void setName(string N)
        {
            RoomName = N;
        }

        public void setN(Room X)
        {
            N = X;
        }

        public void setE(Room X)
        {
            E = X;
        }

        public void setW(Room X)
        {
            W = X;
        }

        public void setS(Room x)
        {
            S = X;
        }


        public Room getN()
        {
            return N;
        }

        public Room getE()
        {
            return E;
        }

        public Room getS()
        {
            return S;
        }

        public Room getW()
        {
            return W;
        }




        static void Main(string[] args)

      Room gh = new Room();
        Room kit = new Room();
        Room Pan = new Room();
        Room Dun = new Room();
        Room dr = new Room();
        Room lib = new Room();
        Room din = new Room();
        Room sr = new Room();
        Room weap = new Room();
        Room tow = new Room();
        Room gal = new Room();
        Room tr = new Room();

        gh.setName("Great Hall");
            gh.setN(dr);

【问题讨论】:

  • 你的setN 方法没有编译的原因是你在声明的末尾有一个流氓;。但是根据答案,您应该了解属性。
  • 是的,它是;。您的错误消息的原因是setN 末尾的分号您完成了没有正文的方法声明(即由{} 包围的部分)。这仅适用于externabstractpartial 方法。
  • Main方法也是一个方法,所以需要把里面的代码抱成{}
  • 我意识到我需要接受代码,但在调试时它不断添加一个 ;到 static void Main(string[] args) 的末尾,并声明命名空间不能直接包含字段和方法等成员。

标签: c# class methods get set


【解决方案1】:

您可以像这样显式处理属性:

private string _roomName;

public string roomName {
   get {
       return _roomName;
   }
   set {
      _roomName = value;
   }
}

【讨论】:

    【解决方案2】:

    C#你可以使用简单的方式处理属性:

    public string RoomName {get; set;}
    

    将使用GETSET 创建一个默认属性。它还会为您创建一个字段,您不必为此烦恼。

    如果你需要做更多的事情,你可以使用字段:

    private string _roomName;
    
    public string RoomName {
       get {
           //do something before returning
           return _roomName;
       }
       set {
          //do something while value is being set
          _roomName = value;
       }
    }
    

    如果您使用的是新的 C# (6.0),您也可以使用该语法:

    private string _roomName;
    public string RoomName => _roomName;
    

    当您在代码中构建属性时,下面可能会发生以下情况: 编译器将属性转换为两个方法的集合,如下所示:

    public string Get_RoomName() {
        return _roomName;
    }
    
    public void Set_RoomName(string value) {
        _roomName = value;
    }
    

    【讨论】:

      【解决方案3】:

      首先,根据你的错误:

      SetN 必须将主体声明为 extern、abstract 或 partial,这适用于我的 get 和 set 方法。

      请关闭class Room末尾的}

      并删除public void setN(Room X);之后的;

      在 C# 中,您可以使用 properties 来获取 get 和 set 方法的功能:

      这是一个简短的变体:

      public string Name{ get; set; }
      

      这是明确的版本:

      private Room myN;
      
      public Room N
      {
          get { return myN; }
          set { myN = value; }
      }
      

      在扩展版本中,您有一个无法从外部访问的私有字段,并且您有一个公共属性。它有一个set { myVar = value; } 部分,相当于您的设置方法。

      编辑:正如@Jens 所建议的那样:value 是一个默认参数,其中包含从外部传递给 set 方法的值。它总是被称为value,并且没有在 C# 中明确声明

      设置时的调用约定是像类变量一样使用它:

      Room AnyRoom = new Room();
      Room X = new Room();
      AnyRoom.N = X;
      

      【讨论】:

      • 你们都忘了他声明为private
      • 也许为了更清楚,你可以提到value 是一个默认参数,它包含从外部传递给set 方法的值。它总是被称为value,并且没有在 C# 中明确声明。
      • @ThePerplexedOne 看起来像一种 Java 方法。有一个私有字段和公共的获取和设置方法。如果您不希望访问此私有字段,为什么还要编写 get 方法
      猜你喜欢
      • 2023-03-15
      • 2013-12-26
      • 2014-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多