lassen Sie uns sagen, ich habeGibt es eine Möglichkeit, eine Methode zu erzwingen, bestimmte Methodensignatur zu folgen?
public delegate DataSet AutoCompleteDelegate(
string filter, long rowOffset);
kann ich die folgende Klasse machen diese Methode Signatur zu erzwingen? (Nur beschworene Idee):
public class MiddleTier
{
[Follow(AutoCompleteDelegate)]
public DataSet Customer_AutoComplete(string filter, long rowOffset)
{
var c = Connect();
// some code here
}
[Follow(AutoCompleteDelegate)]
public DataSet Item_AutoComplete(string filter, long rowOffset)
{
var c = Connect();
// some code here
}
// this should give compilation error, doesn't follow method signature
[Follow(AutoCompleteDelegate)]
public DataSet BranchOffice_AutoComplete(string filter, string rowOffset)
{
var c = Connect();
// some code here
}
}
[EDIT]
Zweck: Ich habe bereits Attribute in meinem Middle Methoden. Ich habe Methoden wie folgt aus:
public abstract class MiddleTier : MarshalByRefObject
{
// Operation.Save is just an enum
[Task("Invoice", Operation.Save)]
public Invoice_Save(object pk, DataSet delta);
[Task("Receipt", Operation.Save)]
public Receipt_Save(object pk, DataSet delta);
// compiler cannot flag if someone deviates from team's standard
[Task("Receipt", Operation.Save)]
public Receipt_Save(object pk, object[] delta);
}
dann auf Laufzeit, ich werde alle die Methoden des Middlelaufen und sie zu Sammlung setzen (Attribute hilft viel hier), dann ordnet sie auf winform der Stellvertretung Funktionen (durch die Schnittstelle erleichtert, plugins-based system) als geladen
Ich denke, wenn ich die Attribute selbstbeschreibender machen kann, so kann der Compiler Inkonsistenzen feststellen.
namespace Craft
{
// public delegate DataSet SaveDelegate(object pk, DataSet delta); // defined in TaskAttribute
public abstract class MiddleTier : MarshalByRefObject
{
[Task("Invoice", SaveDelegate)]
public abstract Invoice_Save(object pk, DataSet delta);
[Task("Receipt", SaveDelegate)]
// it's nice if the compiler can flag an error
public abstract Receipt_Save(object pk, object[] delta);
}
}
Ich denke ich, wenn die Methoden auf jeder Klasse setzen, wäre es zuviel des Guten sein, immer ein Objekt zu instanziiert Remoting. Und wenn man sie in eine separate Klasse einordnet, könnte es schwieriger sein, die Wiederverwendung von Code zu erleichtern, sagen wir, Invoice_Save benötigt einige Informationen über Receipt_Open. Tatsächlich habe ich sogar einen Bericht hier (crystal), der Daten von Remoting middeletier DataSet innerhalb der aufgerufenen Methode abruft, er bekommt einige Informationen über andere Methoden und fusioniert in seinem eigenen DataSet, sie geschehen alle auf Middlese, keine mehreren Roundtrips, Alle sind auf der Server-Seite (Mittelschicht)
Welche Sprache ist das? – hlovdal
Sprache ist C# – Hao
Ich lege dies nicht auf eine Antwort, weil ich es überhaupt nicht geübt habe, aber vielleicht durch Reflexion könnte man (1) alle Methoden in der Klasse (2) für jede Methode überprüfen, ob es das hat gegebene Unterschrift und Attribut. –