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

Интерфейс с перечислениями классов

Есть ли способ взаимодействовать с перечислением другого класса или наследовать его? Очевидно, я могу переместить перечисление за пределы класса, но мне любопытно, можно ли сделать ссылку:

public class deferment
{
    public enum test
    {
        test = 0,
        live
    }
}
public class defermentLog
{
    public enum test1 : deferment:test //this is where I want to reference
    {
    }
    public test1 action()
    {
        return test1.live;
    }
}
30.04.2015

  • перечисление независимо от того, где оно определено, - это просто тип. Он не привязан к экземпляру, а наследование связано, так чего вы пытаетесь достичь? 30.04.2015
  • И вы не можете наследовать одно перечисление от другого, независимо от того, откуда они. 30.04.2015
  • Вы смотрели на это: stackoverflow.com/a/757731/2777098 30.04.2015
  • enum не может наследовать от другого enum, вы можете использовать оператор : для определения базового типа enum (например, char, int, short и т. Д.), Но не для наследования или ссылки на другой enum. 30.04.2015
  • Здесь поможет контекст того, чего вы пытаетесь достичь. 30.04.2015
  • В классе DefermentLog я хочу вызвать перечисление Test из класса Deferment без deferment.test. Меня интересует, можно ли сделать какую-нибудь ссылку, например интерфейс, которая позволит мне определить свойство, локальное для класса DefermentLog. Просто любопытно. 30.04.2015
  • @ user1760769 Если вы не хотите, чтобы перечисление ограничивалось deferment, не помещайте его внутрь deferment. Вся точка вложенных типов состоит в том, чтобы ограничить их контейнерами. 30.04.2015
  • @ user1760769 Если это просто, чтобы избежать имени класса перед именем перечисления, тогда, как вы заявили, просто переместите перечисление из класса. 30.04.2015
  • Перечисления в .Net на самом деле просто синтаксический сахар для чтения только статических полей в статическом классе. Как таковые они не могут передаваться по наследству. 30.04.2015

Ответы:


1

В таком случае да, вы можете.

namespace ConsoleTests
{
    using TestAlias = Class1.test;

    public class Class1
    {
        public enum test
        {
            test,
            live
        }
    }

    public class Class2
    {
        public void x()
        {
            TestAlias t = TestAlias.live;
        }
    }
}

Он называется псевдонимом типа и определяется следующим образом: using TestAlias= Class1.test;

Однако следует отметить, что вы должны определить этот псевдоним в файле, который вы его используете, и он не копируется в другие файлы, поэтому вы должны определять его в каждом из которых вы его используете.

30.04.2015
  • Да, это то, что я хотел. Спасибо 30.04.2015
  • Это не по наследству. Если вы посмотрите на скомпилированный IL, ссылка на исходный тип. 30.04.2015
  • @MatthewWhited, этого не должно было быть, судя по комментариям к вопросу, он просто хотел использовать имя типа без длинного текста. Я почти не использую псевдонимы, но это можно сделать. Я написал комментарий о том, что перечисления не наследуются в основных комментариях ... Его попытка в сообщении не была наследованием, он пытался сделать ссылку на другой тип, просто плохо сказано. 30.04.2015
  • Не стесняйтесь, но подобные вещи позже вызовут путаницу. Если бы вы собирались использовать эту технику, я бы предложил глобальный / базовый класс и использовал аналогичный оператор using для обоих классов. Но когда вы используете значение, позже оно будет содержать имя из исходного местоположения, если вы не объявите еще один псевдоним в точке использования. 30.04.2015
  • В ПОРЯДКЕ. Я понимаю, о чем вы все говорите. Опять же, я не говорю, что это единственный способ сделать это, я просто хотел знать, возможно ли что-то подобное. Я просто плохо сформулировал свои вопросы, так как все еще учусь. Спасибо 30.04.2015
  • Новые материалы

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

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

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

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

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

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

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