我有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属性。我想知道如何在不经历每个实例的情况下完成此操作。我找到了post,但我不确定如何修改已接受的答案以实现我的目标。
UPDATE:下面的代码显示了两个用作MyClass类属性的范围类,并显示了如何访问范围方法。 公共类Range { 公共浮动最小; 公共浮动最大; public Range(float a,float b){ min = a; max = 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);
}
}
答案 0 :(得分:1)
使范围成为MyClass的静态属性,以便所有MyClass对象共享相同的范围。
答案 1 :(得分:0)
这是引用类型的正常行为,因为您在RangeClass
的多个实例之间共享单个MyClass
实例。如果您不想反映更改,请:
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
字段,该字段对应于默认范围:< / p>
public class RangeClass{
public int min;
public int max;
public static readonly RangeClass DefaultRange = new RangeClass { min = 0, max = 100 };
}
答案 2 :(得分: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());
}
答案 3 :(得分:0)
将范围属性从实例更改为静态。这将允许从具有默认值或修改状态的任何MyClass实例查看RangeClass。
public class MyClass{
public static RangeClass range;
public void setRange(Range r){
}
}