创建一个类的构造函数
问题描述:
我试图创建一个类构造函数:创建一个类的构造函数
class MyClass
{
public int VAR1;
public int VAR2;
public MyClass(int var1, int var2)
{
this.VAR1=var1;
this.VAR2=var2;
}
public int DoMath()
{
return this.VAR1+this.VAR2;
}
}
好吧,这个例子可能会工作,一旦构建了DoMath方法将在类实例变得可用。
我想要做的是在构造函数中运行一些方程,并根据结果DoMath方法可能或不可用。因此,像这样:
class MyClass
{
public int VAR1;
public int VAR2;
public MyClass(int var1, int var2)
{
if(var1==var2) /*HERE IT CHECKS IF THE VARS ARE THE SAME*/
{ /*IF THEY'RE NOT THE SAME THEN THE DoMath METHOD IS UNAVAILABLE*/
this.VAR1=var1;
this.VAR2=var2;
}
}
public int DoMath()
{
return this.VAR1+this.VAR2;
}
}
显然,这只是一个例子,但另一种方式来解释会是这样:
我需要一个名为“进程”类在构造函数需要一个进程ID一个参数,构造函数在访问类中的所有方法之前需要检查该过程是否真正存在。
任何人都知道这是可能的吗?
答
这是不可能的,因为你想要它。你可以做的是提供一个属性
private readonly bool canDoMath;
public bool CanDoMath { get { return this.canDoMath; } }
,并在构造函数中设置this.canDoMath
至于你是否能够做数学。那么如果this.canDoMath
为假但调用该方法,则应该有DoMath
抛出InvalidOperationException
。
答
由于只有在运行时才能知道2个参数的相等性,所以不能进行编译时检查来隐藏部分代码中的方法。然而,你可以抛出一个例外DoMath()
在不好的时间被调用。这是例外的完美用法,因为大概DoMath()
的调用者应该知道更好。
答
你最好打赌是根据输入的构造函数检查的结果设置一个标志。然后在DoMath方法中抛出异常,如果它不应该可用。你真的不能带走的方法在运行时,因为它是在已经编译
答
我想,如果给定id的过程中不存在创造出返回null静态工厂方法:
public class Process
{
private Process(...)
{
}
public static Process GetById(int processId)
{
if(ProcessExists(processId))
{
//get process details
}
else return null;
}
}
根据此类的方法,您可能会返回null object而不是null,但这听起来不太可能来自您的描述。
答
不知道你的情况,其余的我不能说这是否是一个好主意或没有,但你可以做的是使用继承:
class MyClass
{
public int VAR1;
public int VAR2;
private MyClass()
{
}
public static MyClass MakeInstance(int var1, int var2)
{
if(var1==var2)
{
return new MySubClass1(var1, var2);
}
else
{
return new MySubClass2();
}
}
}
class MySubClass1 : MyClass
{
public MySubClass1(int var1, int var2)
{
this.VAR1=var1;
this.VAR2=var2;
}
public int DoMath()
{
return this.VAR1+this.VAR2;
}
}
class MySubClass2 : MyClass
{
public MySubClass2()
{
}
//Same as MySubClass1 except no DoMath()
}
然后检查是否DoMath()
可你刚检查班级类型。
听起来像你真的需要重新设计你的课程。 – BrokenGlass
@BrokenGlass:是的,那么..没有任何,我只是在学习。有任何想法吗? – Drahcir
这取决于用例 - 为什么'DoMath()'有时不可用?如果你的班级在某些情况下表现不同*如果是这样,你能否将这种变化的行为提取出来分类到不同的类中? – BrokenGlass