Blick auf diesen Code:C# und Überschreibung Operator mit ref
public class classA
{
public string something;
public classA()
{
something = "aaa";
}
}
public class classB
{
private classA someA = new classA();
public static implicit operator classA(classB val)
{
val.someA.something = "From B";
return val.someA;
}
}
ClassB enthält KlasseA, wie vereinfachte Fall. Es gibt eine Methode (Funktion, nennen Sie es, wie Sie möchten), die Klasse A als param erhalten:
public void test(classA var)
{
MessageBox.Show(var.something);
}
und ein anderes Verfahren, das KlasseA als ref Parameter erhalten:
public void testByRef(ref classA var)
{
MessageBox.Show(var.something);
}
Jetzt habe ich außer Kraft gesetzt Betreiber KlasseA in ClassB so erste Funktion kann auch mit ClassB genannt werden, aber ich weiß nicht, wie ref Operator in ClassB für zweiten Anruf außer Kraft zu setzen:
classA a = new classA();
classB b = new classB();
test(a); // Works
test(b); // Works
testByRef(ref a); // Works
testByRef(ref b); // Does not work - error CS1503: Argument 1: cannot convert from 'ref classB' to 'ref classA'
I habe versucht, so zu überladen
und Variationen, aber mit keinem Erfolg.
Hat jemand dieses Problem und eine Lösung?
Danke, Sasa Kajic
Ein Verweis auf den Rückgabewert von 'b's'-Operator classA (classB val)' ist in keiner Hinsicht ein Verweis auf 'b'. Wenn Sie so vorgehen, würde das nur Verwirrung stiften, weil die Methode, an die Sie es übergeben, einen temporären Wert ändert, der bei der Rückkehr der Methode verschwindet. Dann würden Sie hier fragen, ob wir eine Lösung für dieses Problem hätten.Es ist nicht gut für irgendjemanden, wenn etwas, das aussieht wie 'f (ref b)' ist tatsächlich 'f (lolwut)' –
Wie man sieht, ist someA in ClassB nicht temporär und wird es auch nie sein. – Kajko
Ich brauche Ref von B, wie ich will, dass es geändert wird und immer noch Teil von B, so trennen "Afromb" ist keine Lösung. – Kajko