C# 4.0 C:“是否可以创建一个值为”的对象;“违约财产”;何时引用?

C# 4.0 C:“是否可以创建一个值为”的对象;“违约财产”;何时引用?,c#-4.0,C# 4.0,是否可以使用构造函数参数创建对象,该参数在引用时返回属性值,而不使用点表示法?这里有几个例子: public class myObject { public string myObject {get; private set;} public myObject( string tempstring) { this.myObject = tempstring.ToUpper(); } } var a = new myObject("somevalu

是否可以使用构造函数参数创建对象,该参数在引用时返回属性值,而不使用点表示法?这里有几个例子:

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
。我想我可以创建一个静态类,其中包含一个静态函数,该函数每次都将一个参数转换为一个结果,但它不会维护状态


只是好奇。这将使我实际上要做的事情变得不那么困难。

隐式转换如何。请参见

隐式转换如何。请参见第一种情况中的“是”。重写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
添加强制转换。只要确保它是有意义的,并且是可读的

在类中,您可以使用:

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);
}
当然,您可以使用直接路由,但也只能在使其更具可读性而不是更少时使用它(注意,就像方法运算符不能仅按返回类型重载一样,因此您必须在两者之间进行选择)


在第一种情况下,是的。重写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
添加强制转换。只要确保它是有意义的,并且是可读的

在类中,您可以使用:

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 implicit operator int(myInt m)
是我正在寻找的,但在我的实际情况下,它类似于
public static implicit operator Expression.Lambda(myCondition m)
其中m是一个以字符串(where子句)形式编写的规范,它隐式地将其转换为Lambda表达式。(仍在努力解决)你能展示一下你想要的用途吗(使用Lambda)?很明显,它的边缘可能很粗糙,否则你不需要问,但首先尝试使用显式转换,希望我们可以使用隐式转换。这会很粗糙,但我会尝试一下。这可能需要一段时间。和我想做的非常相似。在底部,他们提到“AdHocSpecification是编写规范而不编写类的另一种方法。你不应该滥用它们,并尝试在一个地方编写它们,如上所述。而且AdHocSpecification没有实现相等,所以两个AdHocSpecification只有在它们是同一实例时才相等。”
public static implicit operator int(myInt m)
是我正在寻找的,但在我的实际情况下,它类似于
public static implicit operator Expression.Lambda(myCondition m)
其中m是一个以字符串(where子句)形式编写的规范,它隐式地将其转换为Lambda表达式。(仍在努力解决)你能展示一下你想要的用途吗(使用Lambda)?很明显,它的边缘可能很粗糙,否则你不需要问,但首先尝试使用显式转换,希望我们可以使用隐式转换。这会很粗糙,但我会尝试一下。这可能需要一段时间。和我想做的非常相似。在底部,他们提到“AdHocSpecification是编写规范而不编写类的另一种方法。你不应该滥用它们,并尝试在一个地方编写它们,如上所述。而且AdHocSpecification没有实现相等,所以两个AdHocSpecification只有在它们是同一实例时才相等。”+1在解释链接上。这正是我想要的,这也在pickypg的答案中。解释链接上的+1。这正是我想要的,这也是皮克普的答案。