2014-10-27 76 views
0

所以我一直在尋找這種感覺像永遠的東西,不知道我做錯了什麼。下面是我的代碼摘錄,我想串CashierLOgInNName的值是新的出納對象名稱:讓用戶輸入字符串並使用該字符串創建對象

public class Cashiers 
    { 
    public int CashierID; 
    public int Password; 
    public string FirstName; 
    public string LastName;  
     public void SetCashiers(int CashierID, int Password,string FirstName, string LastName) 
    { 
     this.CashierID = CashierID; 
     this.Password = Password; 
     this.FirstName=FirstName; 
     this.LastName = LastName; 
    } 

    Console.WriteLine("enter New Log in name"); 
          string CashierLOgInNName= Console.ReadLine(); 

          Console.WriteLine("enter First Name"); 
          string CashierFirstName = Console.ReadLine(); 
          Console.WriteLine("enter Last name"); 
          string CashierLastName = Console.ReadLine(); 
          Console.WriteLine("enter Cashier ID"); 
          string f = Console.ReadLine(); 
          int NewCashierID = Int32.Parse(f); 
          Console.WriteLine("enter Cashier Password"); 
          string g = Console.ReadLine(); 
          int NewCashierPWD = Int32.Parse(g); 
          CashierLOgInNName = (Cashiers)Activator.CreateInstance(null, CashierLOgInNName).Unwrap(); 
+0

而不是簡單地通過創造新的'收銀員()'類? – abto 2014-10-27 07:53:39

回答

0

首先一點校正。它將確保收銀員對象收銀員對象已創建。

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

namespace Activators 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Console.WriteLine("enter New Log in name"); 
      string CashierLOgInNName = Console.ReadLine(); 

      Console.WriteLine("enter First Name"); 
      string CashierFirstName = Console.ReadLine(); 
      Console.WriteLine("enter Last name"); 
      string CashierLastName = Console.ReadLine(); 
      Console.WriteLine("enter Cashier ID"); 
      string f = Console.ReadLine(); 
      int NewCashierID = Int32.Parse(f); 
      Console.WriteLine("enter Cashier Password"); 
      string g = Console.ReadLine(); 
      Cashiers cashierObj = (Cashiers)Activator.CreateInstance(typeof(Cashiers), f, g, CashierFirstName, CashierLastName); 
     } 
    } 
    public class Cashiers 
    { 
     public string CashierID; 
     public string Password; 
     public string FirstName; 
     public string LastName; 
     public Cashiers(string CashierID, string Password, string FirstName, string LastName) 
     { 
      this.CashierID = CashierID; 
      this.Password = Password; 
      this.FirstName = FirstName; 
      this.LastName = LastName; 
     } 
    } 
} 

來到下一部分CashierLOgInNName的值爲新的收銀對象名稱。這似乎是棘手和無用的。我建議有更好的選擇:

  1. 您可以在收銀臺中定義屬性loginName
  2. 您可以創建Dictionary<string, Cashier> LoginName作爲鍵,並將Cashier Object作爲值。

但仍,如果你堅持有使用CSharpCodeProvider類它允許動態創建從源代碼的程序集的方式。 在源代碼中,您可以將對象名稱寫入loginName,然後動態引用該程序集。

然而,它不爲您提供任何用途,因爲您將無法在運行時僅使用該對象,因爲它的名稱僅在運行時才爲您所知。我希望它能幫助你的好奇心。

「在毀滅的時候,創造的東​​西。」 - 爲什麼你使用`Activator`亭亭

+0

這是一個巨大的幫助。但請原諒我對c#很陌生,使用Dictionary 的上下文是什麼?它只是字典<登錄名,收銀員>? – DANS80 2014-10-27 18:11:58

+0

Dictionary 是一個數據結構,表示它將字符串作爲鍵並將Cashier對象作爲值。因此,您還可以將收銀員對象存儲在字典中。無論如何,任重而道遠。我建議你開始參考一些關於C#的書籍。 – vCillusion 2014-10-28 06:04:34

0

activator.createinstance的MSDN文檔和objecthandle.unwrap可能會有所幫助。

Activator.CreateInstance Method

ObjectHandle.Unwrap Method

+0

謝謝,但閱讀,只是made.me更困惑。我需要更多的C#練習,然後我會回到那個,然後再試一次 – DANS80 2014-10-27 18:13:33

+0

爲什麼你需要使用激活類?你打算使用.NET Remoting嗎? – junPac 2014-10-27 23:58:06

+0

這只是一個示例項目,以瞭解我在做什麼。激活者類只是一個嘗試。我不知道如何讓用戶輸入一個字符串,然後使用該字符串作爲新對象的名稱。 I.E.如果我分配一個char newName =「SJones」;如何拿這個變量,並說出收銀員的等價物SJones =新收銀員(); – DANS80 2014-10-28 00:08:51

相關問題