首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在初始化时更新抽象类中的变量

在初始化时更新抽象类中的变量
EN

Stack Overflow用户
提问于 2015-10-28 23:16:33
回答 2查看 66关注 0票数 0

所以在开始的时候,我想设置一些变量,稍后会用到。我正在构建一些图形移动部分,其中我必须为每个移动设置步长(如果X更改为1,则值更改为1*步长...bla bla)。

我有MainWindowViewModel (简写版本):

代码语言:javascript
复制
public class MainWindowViewModel : ViewModelBase
{
    public MainWindowViewModel()
    {
       // Initialization
       Step = 3;
    }
}

DiagramObject类:

代码语言:javascript
复制
public abstract class DiagramObject : ViewModelBase
{
        public abstract double X { get; set; }
        public abstract string Xmeaning { get; set; }

        public abstract double Y { get; set; }
        public abstract string Ymeaning { get; set; }
}

所以我在里面定义了“步骤”:

代码语言:javascript
复制
public class DiagramNode : DiagramObject
{
        public int xstep = 3;
        public int ystep = 1;
        public int xstepvalue = 5;
        public int ystepvalue = 5;

        private double _x;
        public override double X
        {
            get { return _x; }
            set
            {
                //"Grid Snapping"

                _x = (Math.Round(value / xstep)) * xstep;
                NotifyPropertyChanged("X");

                double minutes = (_x / xstep) * xstepvalue;
                TimeSpan interval = TimeSpan.FromMinutes(minutes);
                _xmeaning = interval.ToString();

                NotifyPropertyChanged("Xmeaning");
            }
        }

        private string _xmeaning;
        public override string Xmeaning
        {
            get { return _xmeaning; }
            set
            {
                //"Grid Snapping"

                _xmeaning = value;
                NotifyPropertyChanged("Xmeaning");
            }
        }

        private double _y;
        public override double Y
        {
            get { return _y; }
            set
            {
                //"Grid Snapping"

                _y = (Math.Round(value / ystep)) * ystep;
                NotifyPropertyChanged("Y");

                double keks = (_y / ystep) * ystepvalue;
                _ymeaning = keks.ToString();

                NotifyPropertyChanged("Ymeaning");
            }
        }

        private string _ymeaning;
        public override string Ymeaning
        {
            get { return _ymeaning; }
            set
            {
                //"Grid Snapping"

                _ymeaning = value;
                NotifyPropertyChanged("Ymeaning");
            }
        }
}

我的问题是如何在程序开始时从MainWindowViewModel更新DiagramNode类中的"xstep“、"ystep”和其他步骤?

因此,当我启动时,程序步骤将被定义并更新到DiagramNode类中--现在我已经在类中直接定义了。

我希望我给出足够的代码来理解这个概念(如果不是这样说的话)。如果有任何问题,请提出来。

EN

回答 2

Stack Overflow用户

发布于 2015-10-28 23:29:13

您的MainWindowViewModel需要实例化DiagramNode类的一个实例,以便它可以访问属性来修改它们。

代码语言:javascript
复制
public class MainWindowViewModel : ViewModelBase
{
    DiagramNode myDiagramNode = new DiagramNode();

    public MainWindowViewModel()
    {
        // Initialization
        Step = 3;
        myDiagramNode.xstep = 3;
    }
}

不过,通常更好的做法是将xstep和ystep之类的变量设置为私有,并使用访问器来处理值的设置/获取,如下所示

代码语言:javascript
复制
public class DiagramNode : DiagramObject
{
    private int xstep;

    public int XStep
    {
        get { return this.xstep; }
        set { this.xstep = value; }
    }

    ...
}

public class MainWindowViewModel : ViewModelBase
{
    DiagramNode myDiagramNode = new DiagramNode();

    public MainWindowViewModel()
    {
        myDiagramNode.XStep = 3;
    }
}
票数 0
EN

Stack Overflow用户

发布于 2015-10-28 23:34:33

您可以通过构造函数重载来设置它们

public class DiagramNode(int xstep, int ystep) { // set your values }

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33394856

复制
相关文章

相似问题

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