我在课堂上有一个公共方法。我想将其设为私有,并使用属性来公开该方法。问题是我的方法接受一个整数参数并返回一个布尔值。根据我的经验,财产必须接受并返回相同的类型。封装此方法并使用属性公开它的最佳做法是什么?
答案 0 :(得分:9)
您不应该以这种方式使用属性。属性用于将get_
和set_
调用包装到适当的后备字段,并将它们作为单个成员公开。内部生成的set_
方法是void
,并接受属性类型的实例作为其唯一参数。
如果您要实现的目标需要一个方法,那么公开一个方法。您可能使用的唯一解决方案是使用object
。
答案 1 :(得分:3)
如果传入的值与返回的值不同,则不是属性。如果你沿着这条路走下去,你将会为那些需要调用你的代码或将来维护代码的人制造混乱。
我能想到的唯一解决方案是错误,解决方法是将属性声明为object
类型。
封装此方法并使用属性公开它的最佳做法是什么?
它必须是同一个属性吗?你能有类似的东西:
private Type2 _valueThatIsStoredAsAResultOfCallMethod;
private Type2 CallMethod(Type1 value)
{
// Whatever logic is required here to take a value of Type1 and
// get a value of Type2 from it
return value.ToType2();
}
public Type1
{
set
{
// value is of type Type1
_valueThatIsStoredAsAResultOfCallMethod = CallMethod(value);
}
}
public Type2
{
get
{
return _valueThatIsStoredAsAResultOfCallMethod;
}
}
答案 2 :(得分:1)
嗯,一般来说,通过属性调用方法(或在属性中执行任何复杂操作)是不好的做法,因为它不是类的用户期望发生的。预期的行为是获得价值。
我只是公开方法。
答案 3 :(得分:1)
public bool MyProp
{
get;
private set;
}
public int MyProp_AsInt
{
set
{
MyProp = (value > 0) ? true : false;
}
}
您的职能部门可以取代上述“设置”。 我只是在那里放了一些示例代码。
完整代码
public class MyClass
{
public bool MyProp
{
get;
private set;
}
public int MyProp_AsInt
{
set
{
MyProp = (value > 0) ? true : false;
}
}
}
public class Program
{
static void Main(string[] args)
{
MyClass o = new MyClass();
o.MyProp_AsInt = 1;
System.Console.WriteLine("{0}", o.MyProp);
o.MyProp_AsInt = 0;
System.Console.WriteLine("{0}", o.MyProp);
string line = System.Console.ReadLine();
}
}
答案 4 :(得分:0)
这样做没有最佳做法,因为这是一种不好的做法。
如果你接受/回归有两种协变类型,你可以用他们最低的共同祖先来引用它们,但我仍然要小心。
答案 5 :(得分:0)
方法用于返回不同类型并接受输入。
属性不是。它们返回一种类型并且不接受任何输入。分开两者的主要因素之一。
答案 6 :(得分:0)
采用参数并返回值的方法无法很好地转换为属性,无论它使用何种类型。
该方法接受参数,然后返回结果,而参数接受值或返回值,而不是两者都在同一操作中。如果您必须先通过设置值来使用该属性,然后读取该值,这将非常直观。根本不是你通常如何使用房产。