Ответы пользователя по тегу .NET
  • Переопределение метода через override. Почему не срабатывает?

    @Namynnuz
    Подобного рода наследования приводят к очень хрупкому коду. Именно поэтому ОПП не является моделированием реальности, иначе потом поддерживать эти наркоманские зависимости будет невозможно и любые изменения на любом уровне будут приводить к тому, что где-то что-то постоянно будет отваливаться и чиня в одном месте, мы будем ломать в другом.
    Кроме того, что тебе стоит прочитать хоть какую-то книженцию по шарпею, следует так же изучить принципы SOLID.
    Ответ написан
    Комментировать
  • Как реализовать стек на C#?

    @Namynnuz
    Например, вот так:
    public class SimpleSystemStack<T> where T : struct, IConvertible {
        private readonly int _sizeOfOneElement;
        private T[] _array;
    
        public SimpleSystemStack( int sizeOfOneElement, T[] inputArray = null ) {
            _sizeOfOneElement = sizeOfOneElement;
            if ( inputArray?.Length > 0 ) {
                Length = inputArray.Length;
                _array = inputArray;
            } else {
                Length = 0;
                _array = new T[sizeOfOneElement];
            }
        }
    
        public int Length { get; private set; }
    
        public T Pop() {
            if ( Length > 0 ) {
                Length--;
                return _array[Length];
            }
            throw new IndexOutOfRangeException("Stack is Empty.");
        }
    
        public void Push( T element ) {
            if ( Length >= int.MaxValue )
                throw new IndexOutOfRangeException("Stack overflow.");
            if ( Length >= _array.Length ) {
                var temp = new T[_array.Length * 2];
                Buffer.BlockCopy( _array, 0, temp, 0, Length * _sizeOfOneElement );
                _array = temp;
            }
            _array[Length] = element;
            Length++;        
        }
    }

    Использование:
    var sss = new SimpleSystemStack<int>( sizeof( int ) );
    
    sss.Push( 1 );
    sss.Push( 2 );
    sss.Push( 3 );
    sss.Pop();
    sss.Pop();
    sss.Push( 4 );

    Работает только для primitive types.
    Ответ написан
    Комментировать