私はいくつかのプライベートプロパティと2つのパブリックプロパティ(値と型)を持つ単純なクラスを持っています。 obj.valueを呼び出さなくてもvalueプロパティを返すようにオブジェクトを呼び出す方法を見つけようとしています。私はそれが可能だとは思わない。ここでC#のオブジェクト名だけでオブジェクトプロパティにアクセスできますか?
は、私が考えているものです。
public class myclass {
private int property1;
private int property2;
public string value;
public string type;
public myclass(int property1, int property2, string value, string type)
{
this.property1 = property1;
this.property2 = property2;
this.value = value;
this.type = type;
}
}
var obj = new myclass(1, 2, "abc", "string");
console.write(obj.value); // returns abc
console.write(obj.type); // returns string
console.write(obj); // expecting abc
は、最後の行は、この構文でABCを返す方法はありますか?
あなたはなぜこのようなことを達成したいのですか?私はJavascriptプログラミングモジュールを使ってサービスを構築しています。オブジェクトは変数なので、objの代わりにobj.valueと書くだけで、ユーザーがアクセスできるようにします。 Javascriptがバックエンドオブジェクトを呼び戻しているので、C#ではこの動作が必要です(Javascriptではなく)。もし私が私有財産を保つ必要がなければ、簡単にすることができますが、私はそれらを持っている必要があります。
UPDATE:より明確にするためには :このクラスはJavaScriptインタープリタ(この場合はJINT)によって呼び出されると、クラスは、その値が更新された場合は、データベースを更新する必要があり、その必要性について私有財産
がpublic class SmartNumeric : ISmartVariable
{
private Boolean _simulation;
private Guid UserId;
private long userKeyId;
private long variableKeyId;
private string Name;
public string type
{
get {
return "numeric";
}
}
private float _value;
public float value
{
get {
return _value;
}
set {
_value = value;
if (!_simulation)
new SmartCommon().SetValue(userKeyId, variableKeyId, value.ToString());
}
}
public SmartNumeric(Guid UserId, long userKeyId, long variableKeyId, string Name, float value, Boolean simulation)
{
this.Name = Name;
this._value = value;
this.UserId = UserId;
this.userKeyId = userKeyId;
this.variableKeyId = variableKeyId;
this._simulation = simulation;
}
}
したがって、たとえば、ユーザが参照する
a.value = 45;
よりもJavaScriptで、より自然である
a = 45;
のように、独自のスクリプトを記述します: はここに私の実際のコードですC#のSmartNumericオブジェクト。オブジェクトは更新を受け取り、値を更新して追加のプロパティが必要な場合は、データベースに戻る必要があります。
なぜこの動作が必要ですか?あなたが達成する必要があるものに対して間違ったアプローチをしている可能性があります。 –
あなたが求めていることは理にかなっていません。どのような意味があるか考えてみてください。つまり、objを他の変数に代入することは決してできません。例えば'var obj2 = obj;'は 'obj.value'を' obj2'に代入します。実際、 'obj'を参照する式は' obj.value'を参照します。したがって、objを操作することは決してできません。 – RJM
私はそれが理にかなっていないことを理解していますが、私はいくつかのC#ウィザードがアクセサーの魔法のようなものを思い付くかどうか疑問に思っていました。これにアプローチする最も簡単な方法は、単純なオブジェクト(文字列)を作成するが、他の値を関連付ける方法を見つけることです。私はオブジェクトにアクセスするときにこの配列にアクセスすることができないので、これらのプロパティを保持するために別の配列を使うことはできません... – pdube