2012-10-05 2 views
2

I 후속 상속 계층 구조를 가지고 :는 윈폼 C#

클래스 A : 양식
클래스 B : 클래스 A

A 등급은 그래서 매개 변수를 받아 들일 수 있어야합니다 내가 A 급 이러한 생성자를 정의하려면 어떻게

ClassB mynewFrm = new ClassB(param); 

:이 같은 클래스 B의 인스턴스를 만들 수 있습니다?

감사합니다.

I 편집 #

에어콘, .NET 3.5 윈폼 사용하고 : 클래스 A 및 클래스 B를 부분 클래스를 사용하는 형태로 정의된다. 그래서이 부분 클래스 및 사용자 지정 (재정의 된) 생성자에 대한 질문으로 바뀌고있는 것 같아요.

답변

0

클래스의 생성자는 다음과 같습니다.

private Object _object1; 

public ClassA(object object1) 
{ 
    _object1 = object1; 
} 
0

ClassA에 대한 생성자는

public ClassA(Object param) 
{ 
    //... 
} 

과 같을 것이다 및 base(param) 실제로 해당 매개 변수를 받아들이는 ClassA 생성자를 호출 할 위치를 ClassB 것이

public ClassB(Object param) : base(param) 
{ 
    //... 
} 

과 같을 것이다.

6

다음은 필수 동작을 설명하는 데모 샘플입니다.

학습을 쉽게하기 위해 문자열 유형 매개 변수를 선택하여 사례에 맞게 조정했습니다.

그것을 테스트하기 위해 , 새로운 비주얼 스튜디오를 만들 * C# * 프로젝트와

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Windows.Forms; 

namespace Stackoverflow 
{ 

    public class ClassA : Form 
    { 
     public ClassA() 
     { 
      InitializeComponent(); 
     } 

     public ClassA(string WindowTitleParameter) 
     { 
      InitializeComponent(); 
      this.Text = WindowTitleParameter; 
      MessageBox.Show("Hi! I am ClassB constructor and I have 1 argument. Clic OK and look at next windows title"); 
     } 

     private void InitializeComponent() // Usually, this method is located on ClassA.Designer.cs partial class definition 
     { 
      // ClassA initialization code goes here 
     } 

    } 

    public class ClassB : ClassA 
    { 
     // The following defition will prevent ClassA's construtor with no arguments from being runned 
     public ClassB(string WindowTitleParameter) : base(WindowTitleParameter) 
     { 
      InitializeComponent(); 
      //this.Text = WindowTitleParameter; 
      //MessageBox.Show("Hi! I am ClassB constructor and I have 1 argument. Clic OK and look at next windows title"); 
     } 

     private void InitializeComponent() // Usually, this method is located on ClassA.Designer.cs partial class definition 
     { 
      // ClassB initialization code goes here 
     } 

    } 

    static class Program 
    { 
     /// <summary> 
     /// The main entry point for the application. 
     /// </summary> 
     [STAThread] 
     static void Main() 
     { 
      Application.EnableVisualStyles(); 
      Application.SetCompatibleTextRenderingDefault(false); 

      // If you debug this code using StepInto, you will notice that contructor of ClassA (argumentless) 
      // will run prior to contructor of classB (1 argument) 

      Application.Run(new ClassB("Look at me!")); 
     } 
    } 
} 
+0

클래스 A는 매개 변수를하지 받아 들일 수 있어야 다음 코드로 program.cs에게을 채우기 어떤 시점에서 생성자에서 InitializeComponent() 루틴을 호출 할 필요가 없습니까? – sarsnake

+0

위의 생성자를 구현할 때 "ClassA '에'0 '인수를 사용하는 생성자가 포함되어 있지 않습니다." – sarsnake

+0

안녕하세요. 방금 ClassA 또는 ClassB에서 동일한 매개 변수를 사용할 수있는 코드 개정을 완료했습니다. 디버거의 STEP-INTO 기능을 사용하여 코드 흐름을 더 잘 이해할 것을 제안합니다. 희망이 도움이된다. –