如何定义get和set方法

时间:2016-12-09 13:26:47

标签: c# class methods get set

非常感谢,非常感谢您的帮助。它意识到我需要学习多少。它是我想要设置的方向,并且已经调整了您的示例以反映这一点。但是,它现在要求;在我的静态虚空主的尽头....即使我以前从未添加过这个,它要求声明身体外部,抽象。它也没有让我在Main中设置链接,我使用以下语法gh.setName(" Great Hall"); gh.setN(DR);为了设置大厅和客厅之间的北方联系。任何的想法?

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);

3 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:2)

您可以像这样明确处理属性:

private string _roomName;

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

答案 2 :(得分:1)

首先,根据您的错误:

  

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; } 部分,它等同于你的set-method。

编辑:正如@Jens所建议的那样:value是一个默认参数,它包含从外部传递给set方法的值。它总是被称为value,而不是在C#

中明确声明

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

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