是否可以使用构造函数参数创建一个对象,该参数在引用时返回属性值,而不使用点表示法?以下是一些例子:
public class myObject
{
public string myObject {get; private set;}
public myObject( string tempstring)
{
this.myObject = tempstring.ToUpper();
}
}
var a = new myObject("somevalue");
Console.WriteLine( myObject ); // outputs the string "SOMEVALUE"
这是另一次尝试:
public class myInt
{
public int myInt {get; private set;}
public myInt(string tempInt)
{ this.myInt = Convert.ToInt32(tempInt);
}
}
var a = new myInt("3");
var b = a + a; // ends up being an int datatype value of 6
我知道我总能做var b = a.myInt + a.myInt
。我想我可以使用静态函数创建一个静态类,每次将参数转换为结果,但它不会保持状态。
好奇。这将使我实际上试图做的事情变得更加困难。
答案 0 :(得分:3)
在第一种情况下,是的。覆盖ToString方法。
public class myObject
{
public string myValue {get; private set;}
public myObject( string tempstring)
{
this.myValue = tempstring.ToUpper();
}
public override string ToString()
{
return myValue;
}
}
在第二种情况下,有点像。您不应该尝试重载运算符以提供意外行为。创建一种方法来执行在读取代码时没有意义的行为。你建议的(返回一个int)肯定不会让我返回一个int(主要是因为var而不是严格定义的类型)。使用+
运算符返回新的myInt
对象将有意义。使用+
运算符返回int
不会。
您可以重载+
运算符以返回新的myInt对象,然后还向int
添加implicit强制转换。只要确保它有意义,并且它是可读的。
在课堂上,您可以使用:
public static implicit operator int(myInt m)
{
return myValue;
}
public static myInt operator +(myInt left, myInt right)
{
// requires constructor that takes int
return new myInt(left.myValue + right.myValue);
}
当然,你可以走直接路线,但只有当它使它更具可读性而不是更少时才使用它(注意,就像方法操作符不能简单地通过返回类型重载,所以你必须在两个)。
public static int operator +(myInt left, myInt right)
{
return left.myValue + right.myValue;
}
答案 1 :(得分:2)