Προς το περιεχόμενο

C# - Συνάρτηση σαν χαρακτηριστικό κλάσης


bnvdarklord

Προτεινόμενες αναρτήσεις

Δημοσ.

Φτιάχνω μια generic κλάση για Binary Heap, και θέλω να περάσω την συνάρτηση για την σύγκριση δύο αντικειμένων. Αυτο που εχω κάνει και δουλεύει είναι το παρακάτω, αλλα δεν ξέρω αν είναι ο σωστός τρόπος, κυρίως γιατι πρεπει και το delegate και η function να είναι οπωσδήποτε public, πράγμα που μου φαινεται περίεργο.

 

>
class BinaryHeapList<T>
{
	public delegate bool CompareFunction(T obj1, T obj2);
	public CompareFunction GreaterThan;

	private List<T> L;
	

	public BinaryHeapList(CompareFunction gt)
	{
		L = new List<T>();
		this.GreaterThan = gt;
	}
	
	
	...
}

Δημοσ.

αν τα κάνεις όλα private δεν νομίζω να έχεις πρόβλημα.

Όπως το έχεις τώρα (public η BinaryHeapList) πρέπει να είναι public και ο delegate

Δημοσ.

Δεν υπαρχει λογος να φτιαξεις delegete εφοσον υπαρχει (System.Func με αρκετα overload)

πχ

> class Foo<T>
   {
       private Func<T, T, bool> _Expr;
       public Foo(Func<T, T, bool> expr)
       {
           this._Expr = new Func<T, T, bool>(expr);
       }
       public void DoSomthing(T t1, T t2)
       {
           Console.WriteLine(_Expr(t1,t2));
       }
   }

   class Program
   {
       static bool fee(int a, int 
       {
           return a<b;
       }
       static void Main(string[] args)
       {

           Foo<int> f = new Foo<int>((a,  => a > ;//lambda
           Foo<int> f1 = new Foo<int>(fee);// function
           f.DoSomthing(1,2);
           f1.DoSomthing(1,2);
      	
           Console.Read();
       }
   }

 

 

ΥΓ: Το caps B ειναι bug του forum.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...