首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C#与另一个类中某个类的变量交互

C#与另一个类中某个类的变量交互
EN

Stack Overflow用户
提问于 2017-01-23 17:27:28
回答 3查看 183关注 0票数 0

我正在学习C#,我询问了这个类之外与类的变量交互的最佳方法。我想了想:

代码语言:javascript
运行
复制
public class Character
    {
        private int x, y;

        public Character(int posX, int posY)
        {
            x = posX;
            y = posY;
        }

        public int X
        {
            get
            { 
                return x;
            }
            set
            { 
                x = value;
            }
        }

        public int Y
        {
            get
            { 
                return y;
            }
            set
            { 
                y = value;
            }
        }
    }`

    class MainClass
    {
        public static void Main (string[] args)
        {
            Character hero = new Character (42, 36);
            Console.WriteLine (hero.X);
            Console.WriteLine (hero.Y);
            hero.X = 5;
            Console.WriteLine (hero.X);
        }
    }

我不知道这个方法是好的还是优化的,但它是有效的。但是,如果我想对10个变量这样做,我的类将为我的变量做至少100行(如果我想在get/set中添加测试)100行……你知道还有什么方法可以继续吗?或者我如何压缩这个方法?谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-01-23 17:38:05

这种类型的变量被称为属性,当我希望变量在其他对象中是可读和可编辑的时,它被使用,所以它是解决您的问题的最佳解决方案,即使您将增加属性的数量或在get/set中添加检查。去吧!

票数 0
EN

Stack Overflow用户

发布于 2017-01-23 17:29:08

您可以使用auto-implemented properties

代码语言:javascript
运行
复制
public class Character
{
   public Character(int x, int y)
   {
      X = x;
      Y = y;
   }

   public int X { get; set; }
   public int Y { get; set; }
}

同样,在现实生活中,如果你需要更新很多其他类的变量,考虑重新设计你的代码。您可能已经将数据和逻辑分成了两个不同的类。考虑将两个类合并为一个类,其中包含数据和处理该数据的逻辑。

注意: C#的下一个版本Record Types有一个很大的更新,它允许你只在类名后面列出所有的类属性:

代码语言:javascript
运行
复制
class Character(int X, int Y);

对于数据传输对象来说,这是很好的语法糖。

票数 4
EN

Stack Overflow用户

发布于 2017-01-23 18:04:09

除了auto-properties之外,还可以使用Object initializer。在这种情况下,您不需要显式声明构造函数。使用该功能,您可以节省更多代码行。检查以下代码以查看更改:

代码语言:javascript
运行
复制
public class Character
{       
   public int X { get; set; }
   public int Y { get; set; }
}


class MainClass
{
    public static void Main (string[] args)
    {
        var hero = new Character {X = 42, Y = 36};
        Console.WriteLine(hero.X);
        Console.WriteLine(hero.Y);
        hero.X = 5;
        Console.WriteLine (hero.X);
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41802904

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档