2016-06-15 4 views
-1

Как получить значение конструктора абстрактных классов в производном классе.Как получить значение конструктора абстрактного класса в производном классе

public abstract class ABC 
     { 
      private string data = "hi"; 

      protected ABC(string myString) 
      { 
       myString = data; 
      } 
     } 
     public class XYZ: ABC 
     { 
      public string abc= ""; 
      public XYZ(string myString) 
       : base(myString) 
      { 
       abc = myString; 
      } 
     } 

      XYZ var = new XYZ("567"); 
      Response.Write(var.abc); 

Я получаю 567 в качестве вывода, как получить «hi567» или «567hi» или даже «привет».

+0

Это, как представляется, полностью зависит от конкретной реализации/синтаксиса языка. Является ли эта Java? –

+0

его C# не java –

+0

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

ответ

1

Довольно просто - но любопытное странно:

using System; 

namespace ConsoleApplication1 
{ 
    internal class Program 
    { 
     private static void Main(string[] args) 
     { 
      var var = new XYZ("567"); 
      Console.WriteLine(var.abc); 

      Console.ReadLine(); 
     } 
    } 

    public abstract class ABC 
    { 
     private string data = "hi"; 

     protected ABC(string myString, out string outString) 
     { 
      myString = this.data; 
      outString = myString; 
     } 
    } 

    public class XYZ : ABC 
    { 
     public string abc = ""; 

     public XYZ(string myString) : this(myString, string.Empty) 
     { 
     } 

     private XYZ(string myString, string outString) : base(myString, out outString) 
     { 
      this.abc = outString + myString; 
     } 
    } 
} 

Вам просто нужно пройти out-parameter для базового конструктора.

+0

Я тоже думал о параметре «out», а также думал «странно». В абстрактном классе конструктору действительно не нужен первый параметр, поэтому используйте 'protected ABC (out string outString) {outString = data; } ' –

+0

Спасибо @Peter, что я ищу ... –

+0

Передача параметров ref или out конструктору является уродливой –

0

Это то, что дает выход вы хотите, но не уверен, хотя то, что в вашем уме -

public abstract class ABC 
    { 
     private string data = "hi "; 

     protected ABC(string myString) 
     { 
      data += myString; 
     } 

     public string PropToReturnValuePassedInCtor{ get { return data; } } 
    } 

    public class XYZ: ABC 
    { 
     public string abc = ""; 

     public XYZ(string myString) 
      : base(myString) 
     { 
      abc = base.PropToReturnValuePassedInCtor; 
     } 
    } 

    var t = new XYZ("567"); 
    Console.Write(t.abc); //hi 567 
+0

Я думаю, что вопросник хочет сохранить 'data' частным и не хочет раскрывать его через свойство. –

+0

Привет @Amit, я запустил ваш код, но не дал никакого вывода. –

+0

@PeterPerot - если OP хочет скрыть его, зачем вообще его использовать? –

Смежные вопросы