Nano Hash - криптовалюты, майнинг, программирование

Как я могу исправить ошибку переполнения стека в этом классе

Кажется, существует конфликт между конструктором и установщиком для диаметра. Ошибка появляется, когда я пытаюсь определить объект Sphere.

using System;

namespace Challenge6
{
    class Sphere
    {
        public double Diameter
        {
            get => Diameter;
            set => Diameter = value;
        }
        public double Volume => (4.0 / 3.0) * Math.PI * Math.Pow(Diameter, 3) / 8.0;
        public double Surface => 4 * Math.PI * Math.Pow(Diameter, 2) / 4.0;
        public Sphere (double dia)
        {
           Diameter = dia;
        }
    }
}

  • Читай код, внимательно. Особенно ваша декларация о собственности. 08.12.2020
  • Используйте его для будущих отладок. docs.microsoft.com/en-us/visualstudio/debugger/. 08.12.2020
  • Получатель и установщик свойства Diameter запрашивает доступ к Diameter, поэтому запрашивает доступ к Diameter, запрашивает доступ к Diameter, запрашивает доступ к Diameter, запрашивает доступ к Diameter... поэтому исключение переполнения стека, потому что нет окончания. Таким образом, вам нужно использовать автоматическое свойство или частное или защищенное поле, действующее как буфер для хранения реального значения, например _Diameter, чтобы иметь возможность выполнять процесс на данные. Я надеюсь, что это поможет вам получить удовольствие от написания кода на C#: Как улучшить свои знания в С# 08.12.2020
  • Большое спасибо за помощь... звучит логично. 08.12.2020

Ответы:


1

Если я создаю экземпляр вашего класса и запрашиваю значение свойства Diameter, он переходит к методу get Diameter, который возвращает свойство Diameter, которое для этого переходит к методу get Diameter, который возвращает свойство Diameter. , что.... теперь вы видите проблему? Вы получаете бесконечную рекурсию.

Есть ли какая-то конкретная причина, по которой вы просто не написали стандартное автоматически реализуемое свойство?

public double Diameter { get; set; }

сделает все, что вам нужно.

07.12.2020
  • да, это работает, и даже когда я удаляю код установки, но иногда я хочу проверить значение диаметра на наличие положительных значений, и я еще не написал его. поэтому мне нужен код установки. 08.12.2020
  • Вы имеете в виду, что хотите проверить значение, прежде чем согласиться установить его? В этом случае вам нужно будет использовать отдельное поле поддержки (например, см. stackoverflow.com/a/6127320/5947043). ). Одно можно сказать наверняка: вы не можете указать свойству хранить значение внутри себя, потому что тогда вы получите бесконечный цикл. 08.12.2020
  • Да... это кажется разумным... спасибо за решение проблемы. 08.12.2020
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..