Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Наследование, Не могу вызвать метод из унаследованного 
:(
    Опции темы
Doss
Дата 18.10.2007, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 5.10.2007

Репутация: нет
Всего: нет



Не смотрите пожалуйста на саму задачу, прошу обратить внимание на семантику! Не могу понять, как вызвать метод из уноследованного класса, если создан массив экземпляра класса..
Пробывал непосредственно вызвать, но что то не пойму, ругается, что неоходимо конвертировать переменную...ну и все такое...в коде написано подробно где нужно вызвать
Код

using System;
using System.Collections.Generic;
using System.Text;

namespace Lab9
{
    class Point [color=limegreen]// Базовый класс -точка[/color]
    {
        public Point()
        {
          
            this.point = 25;

        }
      
        public Point(int point)
            : this()
        {
            this.point =point;
        }
        
       
        public int Getpoint
        {
            get
            {
                return point;
            }
            set
            {
                if (value > 0) point = value;
                else point = 0;
            }
        }
       virtual public void Passport()
        {
            Console.WriteLine("Точка={0}\t ",  point);
        }
       
        int point;
    }



    class ColoredPoint:Point[color=green]//класс потомок от Point[/color]
    {
        public ColoredPoint()
        {
           color = "blue";
        }
        public ColoredPoint(int point,string color)
            : base(point)
        {
            this.color = color;
        }
        public string GetColor
        {
            get
            {
                return color;
            }
            set
            {
                if (color != null) color = value;
                else Console.WriteLine("Вы ввели на строковое значение");
            }
        }
       
        override public void Passport()
        {
            Console.WriteLine("Точка={0}\t Цвет точки={1}\t ", Getpoint , color );
        }
       string color;
       
    }



   class Line : Point[color=green]//Класс линия потомок класса Point[/color]
    {
        public Line()
        {
            line = 50;
           
        }
        public Line(int point,int line)
            : base(point)
        {
            this.line = line;
           
        }
       public int GetLine
       {
           get
           {
               return line;
           }
           set
           {
               if (value > 0) line = value;
               else line = 0;
           }
       }
      
      
       override public void Passport()
       {
           Console.WriteLine("Точка={0}\t Линия={1}\t ", Getpoint, line);
       }
        int line;
      
    }



    class ColoredLine : Line[color=green]//Класс потомок Line  и содержит метод который необходимо вызвать в Main[/color]
    {
        double  x,y;
       public ColoredLine()
        {
         this.x = 23 ;
        }
     /*   public double GetX
        {
            get
            {
                return x;
            }
        }*/
       public void Ugol(double x)
        {
            y = Math.Cos (x);
            Console.WriteLine("Угол" + y);
           // return y;
        }
        
       /* override public void Passport()
        {
            Console.WriteLine("Угол=\t "+y);
        }*/
    }




      class PolyLine:Line[color=green]//Также содержит метод его тоже необх вызвать[/color]
        {
                 
          public void  Mashtab(double  line)
            {
                line+= 100;  
               // return line ;
                Console.WriteLine("Масштаб"+line );

            }
         /* override public void Passport()
          {
              Console.WriteLine("Масштаб=\t "+ line);
          }*/
           double  line;
          
            

    }


   
    class Program
    {
        static void Main()
        {
           
            const int n = 3;
            Point[] picture = new Point[n];[color=green]//Массив содержащий ссылки   [/color]
            
            picture[0] = new Point(23);
            picture[1] = new ColoredPoint(100,"Красный");
            picture[2] = new Line(123,4);
            picture[3] =;            [color=green] //Здесь необходимо вызвать метод из класса ColorLine[/color]          
           // picture[4] = 


            foreach (Point elem in picture) elem.Passport();
            ColoredLine f = new ColoredLine();
            f.Ugol(3);
            PolyLine t = new PolyLine();
            t.Mashtab(1);


PM MAIL   Вверх
1stain
Дата 18.10.2007, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 486
Регистрация: 30.7.2007
Где: Киев - Харьков

Репутация: 3
Всего: 40



великодушно извините, что это такое?  smile 
Код

    class Point [color=limegreen]// Базовый класс -точка[/color]


Это сообщение отредактировал(а) 1stain - 18.10.2007, 22:29


--------------------
Все знают, что это невозможно. Но вот приходит невежда, которому это неизвестно - он-то и делает открытие. (Albert Einstein)
user posted image
PM MAIL   Вверх
0000
Дата 19.10.2007, 00:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 208
Регистрация: 11.7.2006
Где: Нижний Новгород

Репутация: нет
Всего: 5



я бы вынес все эти вещи в интерфейсы..
например так

Код

interface IPoint
{
     void Pasport();
     int value {get; set; }
     Color color {get; set; }
}
interface ILine : IPoint
{
     void Ugol (double x);
     void Mashtab(double line);
}


и дальше при создании коллекции List<IPoint> для вызова методов Ugol и Mashtab можешь проверить элемент - реализует он интерфейс ILine или нет

не факт, что так путево будет - но это первое, что приходит в голову в 2 часа ночи...  smile 
PM MAIL ICQ   Вверх
1stain
Дата 19.10.2007, 08:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 486
Регистрация: 30.7.2007
Где: Киев - Харьков

Репутация: 3
Всего: 40



Код

class Program
    {
        static void Main(string[] args)
        {
            BaseClass[] baseClassArray = new BaseClass[4]{new BaseClass(), new Derived2(), 
                new Derived3(), new Derived1() };

            for (int i = 0; i < baseClassArray.Length; ++i)
            {
                if ( baseClassArray[i].GetType() == typeof( Derived3 ))
                {
                    Derived3 d3 = baseClassArray[i] as Derived3;
                    Console.WriteLine("{0}Вызов всех методов, которые может вызвать Derived3 объект", Environment.NewLine);
                    d3.Derived3Method();
                    d3.Derived2Method();
                    d3.Derived1Method();
                    d3.BaseClassMethod();
                }
                else if ( baseClassArray[i].GetType() == typeof(Derived2) )
                {
                    Derived2 d2 = baseClassArray[i] as Derived2;
                    Console.WriteLine("{0}Вызов всех методов, которые может вызвать Derived2 объект", Environment.NewLine);
                    d2.Derived2Method();
                    d2.Derived1Method();
                    d2.BaseClassMethod();
                }
                else if ( baseClassArray[i].GetType() == typeof(Derived1) )
                {
                    Derived1 d1 = baseClassArray[i] as Derived1;
                    Console.WriteLine("{0}Вызов всех методов, которые может вызвать Derived1 объект", Environment.NewLine);
                    d1.Derived1Method();
                    d1.BaseClassMethod();
                }
                else
                {
                    Console.WriteLine("{0}Вызов метода класса BaseClass", Environment.NewLine);
                    baseClassArray[i].BaseClassMethod();
                }
            }
        }
    }

    class BaseClass
    {
        public void BaseClassMethod()
        {
            Console.WriteLine(String.Format("{0}.BaseClassMethod", this.GetType().Name));
        }
    }

    class Derived1 : BaseClass
    {
        public void Derived1Method()
        {
            Console.WriteLine(String.Format("{0}.Derived1Method", this.GetType().Name));
        }
    }

    class Derived2 : Derived1
    {
        public void Derived2Method()
        {
            Console.WriteLine(String.Format("{0}.Derived2Method", this.GetType().Name));
        }
    }

    class Derived3 : Derived2
    {
        public void Derived3Method()
        {
            Console.WriteLine(String.Format("{0}.Derived3Method", this.GetType().Name));
        }
    }


Иерархию классов проверять от самого последнего наследника по порядку до базового класса


--------------------
Все знают, что это невозможно. Но вот приходит невежда, которому это неизвестно - он-то и делает открытие. (Albert Einstein)
user posted image
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1718 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.