Feedback

C# - Der * Operator mal anders...

Veröffentlicht von am 22.01.2010
(3 Bewertungen)
Dieses Beispiel implementiert den *-Operator auf ein klonbares Objekt.

Ein Code nach dem Muster


MyCloneableObject myObj = new MyCloneableObject();

IEnumerable<MyCloneableObject> list = myObj * 5979;


würde eine Liste mit 5979 geklonten Instanzen von myObj zurückgeben, die man bspw. mit der LINQ-Extension ToArray() in ein Array umwandeln kann.

Eine umgekehrte Verwendung wie


MyCloneableObject myObj = new MyCloneableObject();

IEnumerable<MyCloneableObject> list = 5979 * myObj;


ist ebenfalls möglich.
GFU-Schulungen  [Anzeige]

JavaScript für .NET-Entwickler

Sie sind .NET-Entwickler und nun stehen Sie vor der Aufgabe, JavaScript in Ihre Arbeit einzubinden. Die Schulung vermittelt Ihnen die JavaScript Grundlagen und die Funktionen der Scriptsprache. Sie wissen, wie objektorientierte Programmierung in JavaScript funktioniert und lernen abschließend Best Practicies Fälle kennen.

VB.NET Einführung

Die Schulung zeigt Ihnen, wie Sie einfache, benutzerorientierte Programme, die auf Datenbanken zugreifen, in VB.NET eigenständig entwickeln. 

using System;
using System.Collections.Generic;

namespace MarcelJKloubert
{
    public class MyCloneableObject : ICloneable
    {
        #region Methoden
        /// <summary>
        /// 
        /// </summary>
        /// <see cref="System.ICloneable.Clone()"/>
        public object Clone()
        {
            // hier kommt der Code zum klonen des Objektes rein...
        }
        #endregion

        #region Operatoren
        /// <summary>
        /// Erstellt eine gewisse Anzahl von geklonten Objekten.
        /// </summary>
        /// <param name="obj">Objekt, das geklont werden soll.</param>
        /// <param name="count">Anzahl der geklonten Objekte.</param>
        /// <returns>Liste mit geklonten Objekten.</returns>
        /// <exception cref="">Wird geworfen, wenn die Anzahl kleiner als 0 ist.</exception>
        public static IEnumerable<MyCloneableObject> operator *(MyCloneableObject obj, int count)
        {
            if (count < 0)
            {
                throw new ArgumentOutOfRangeException("count");
            }

            for (int i = 0; i < count; i++)
            {
                MyCloneableObject item = obj is MyCloneableObject ?
                                         (MyCloneableObject)obj.Clone() : null;

                yield return item;
            }
        }

        /// <summary>
        /// Erstellt eine gewisse Anzahl von geklonten Objekten.
        /// </summary>
        /// <param name="count">Anzahl der geklonten Objekte.</param>
        /// <param name="obj">Objekt, das geklont werden soll.</param>
        /// <returns>Liste mit geklonten Objekten.</returns>
        /// <exception cref="">Wird geworfen, wenn die Anzahl kleiner als 0 ist.</exception>
        public static IEnumerable<MyCloneableObject> operator *(int count, MyCloneableObject obj)
        {
            return obj * count;
        }
        #endregion
    }
}
Abgelegt unter System, ICloneable, klonbar, klonen, *, operator.

2 Kommentare zum Snippet

Christopher Kk schrieb am 24.01.2010:
Hmm ganz ehrlich gefällt mir das nicht. Ist irgendwie nicht intuitiv für diesen Operator. Da würde ich eher eine Methode machen wo ich die Anzahl der Klone angebe und diese dann eine IEnumerabel<T> zurück gibt.
Koopakiller schrieb am 31.10.2016:
Sonderlich intuitiv finde ich die Operator-Überladung auch nicht. Aber das Snippet zeigt gut was technisch möglich ist, was mir sehr gefällt.
 

Logge dich ein, um hier zu kommentieren!