0

我有 RangeClass 和一个 MyClass,它有 RangeClass 属性。

 public class RangeClass{
    public int min;
    public int max;
 } 

 public class MyClass{
     RangeClass range;
     public void setRange(Range r){

     }
 }

我想创建几个 MyClass 实例,而 myClass.range 是 RangeClass 的引用(比如 defaultRange)。因此,每当我更改 defaultRange 时,它​​都会反映到 myclass 的所有 range 属性。我想知道如何在不经历每个实例的情况下做到这一点。我找到了这篇文章,但我不确定如何修改接受的答案以实现我的目标。

更新:下面的代码显示了用作 MyClass 类的属性的两个范围类,并显示了如何访问范围方法。公共类范围{公共浮动分钟;公共浮动最大值;公共范围(浮动 a,浮动 b){ min = a; 最大值 = b; }

    public bool Contains(float a){
        if (a >= min && a<=max){
            return true;
        }
        return false;
    }
}

public class MyClass{
    public static Range range;
    public void SetRange(Range r){
        range = r;
    }
    public bool Cointains(float num){
        return range.Contains(num);
    }
}

public class OtherClass{
    MyClass instance1;
    MyClass instance2;

    public OtherClass(){
        Range range1 = new Range(1,5); //creates instance of Range
        Range range2 = new Range(6,10); //creates another instance of Range

        instance1 = new MyClass();
        instance1.SetRange(range1);

        instance2 = new MyClass();
        instance2.SetRange(range2);

        bool isInSetA = instance1.Contains(4);
        bool isInSetB = instance2.Contains(4);
    }
}
4

4 回答 4

1

使范围成为 MyClass 的静态属性,以便所有 MyClass 对象共享相同的范围。

于 2013-05-30T05:27:54.223 回答
0

这是引用类型的正常行为,因为您RangeClassMyClass. 如果您不想反映更改,则:

1 - 你可以做你的RangeClass不可变,所以,你根本不能改变它的实例:

public class RangeClass
{    
    public int Min { get; private set; }
    public int Max { get; private set; }

    public RangeClass(int min, int max)
    {
        Min = min;
        Max = max;
    }
}

2 - 您可以在构造函数中添加默认RangeClass实例的MyClass创建:

public class MyClass
{
     public MyClass()
     {
         range = new RangeClass { min = 0, max = 100 };
     }

     RangeClass range;

     public void setRange(Range r)
     {
     }
 }

如果您确实想反映更改,只需在 中创建一个public static属性或public static readonly字段RangeClass,它将对应于默认范围:

public class RangeClass{
    public int min;
    public int max;

    public static readonly RangeClass DefaultRange = new RangeClass { min = 0, max = 100 };
 } 
于 2013-05-30T05:29:30.293 回答
0

静态修饰符不是您想要的吗? http://msdn.microsoft.com/en-us/library/98f28cdx.aspx

例如:伪代码

Class ClassA
{
    public int IntA = 0;
    public int IntB = 5;
}

class ClassB
{
    public static ClassA;
}

main
{
    ClassB MyClassB;
    ClassB MySecondClassB;

    MySecndClassB.ClassA.IntA = 1; //The vale of 1 will be overwritten by
    MyClassB.ClassA.IntA = 5; //the value of 5 here, for all instances of ClassB.
    System.Diagnostics.Print(MySecndClassB.ClassA.IntA.ToString() + " - " + MyClassB.ClassA.IntA.ToString());
}
于 2013-05-30T05:29:37.167 回答
0

将您的范围属性从实例更改为静态。这将允许从任何具有默认值或修改状态的 MyClass 实例查看 RangeClass。

public class MyClass{
     public static RangeClass range;
     public void setRange(Range r){

     }
 }
于 2013-05-30T05:57:41.753 回答