none
跨方案讀取 private RRS feed

  • 問題

  • 假設目前一個專案裡有main1與main2的方案,namespace相同

     

    main1是

            private void Tags (object sender, EventArgs e)
            {

            int a=0;

           for(int i = 0 ; i<10 ;i++)

            {
             a=a++;

            }

          }

    main2要如何去讀取已經執行完的a值???

      private void Tags1 (object sender, EventArgs e)
            {

            main1 read =new main1();

          ?????????

          }

    我的問號裡該填什麼?? 還是我的想法錯了 ~~不是用main1 read =new main1();

     

    =======================================================================

    如果不在乎變數型態而是在乎跨黨讀取而已  那會是怎麼寫  之前有寫過但是忘了  在我印象中 不是用NEW的方法就可以讀取嗎????

    2010年10月6日 下午 11:59

解答

  • 我在想,您對於專案、方案的描述可能錯了。因此我給的解決方式是非常簡單的。 一個 ConsoleApplication,裡有一個 Program.cs 及 Class1.cs

    Class1.cs

    namespace ConsoleApplication1
    {
    	class Class1
    	{
    		public int Tags()
    		{
    			int a = 0;
    			for (int i = 0; i < 10; i++)
    			{
    				a++;
    			}
    			return a;
    		}
    	}
    }
    

    Program.cs

    using System;
    
    namespace ConsoleApplication1
    {
    	class Program
    	{
    		static void Main(string[] args)
    		{
    			Class1 c =new Class1();
    			Console.WriteLine(c.Tags());
    		}
    	}
    }
    
    • 已標示為解答 幫幫我阿 2010年10月14日 上午 06:37
    2010年10月7日 上午 01:37

所有回覆

  • 照你的程式架構,你是要去讀一個區域變數,這是不可能的。
    就算用 Reflection,也讀不到區域變數。
    你又要跨行程讀,這實作起來是很複雜的,不會只有一行 ???????,寫個一百行我也不覺得奇怪。

    你可以做的有:

    1. 將你要的共享的變數改為屬性。
    2. 如果 main1 是 DLL,那按照一般存取 .NET DLL 的方法 (加入參考後在 main2 呼叫) 就可以取得你要的東西。
    3. 如果 main1 是 EXE,那你只能利用行程間通訊的方法來做 (Socket, .NET Remoting, WCF, Named Pipe, Mailslot, ... 很多方法,但都不簡單)。


    以下為簽名檔,請勿對號入座:
    初學不是問題,但用不正確的態度來問問題,那就是很大的問題。
    請不要藉新手之名行小白之實,否則只會讓更多無辜的新手得不到幫助而已。
    如果不知道什麼是小白,請參閱:何謂小白
    • 已提議為解答 阿尼 2010年10月7日 上午 01:05
    2010年10月7日 上午 12:30
    版主
  •  

    如果不在乎變數型態而是在乎跨黨讀取而已  那會是怎麼寫  之前有寫過但是忘了  在我印象中 不是用NEW的方法就可以讀取嗎????

     

    我只要跨檔傳值而已

    2010年10月7日 上午 01:16
  • 我在想,您對於專案、方案的描述可能錯了。因此我給的解決方式是非常簡單的。 一個 ConsoleApplication,裡有一個 Program.cs 及 Class1.cs

    Class1.cs

    namespace ConsoleApplication1
    {
    	class Class1
    	{
    		public int Tags()
    		{
    			int a = 0;
    			for (int i = 0; i < 10; i++)
    			{
    				a++;
    			}
    			return a;
    		}
    	}
    }
    

    Program.cs

    using System;
    
    namespace ConsoleApplication1
    {
    	class Program
    	{
    		static void Main(string[] args)
    		{
    			Class1 c =new Class1();
    			Console.WriteLine(c.Tags());
    		}
    	}
    }
    
    • 已標示為解答 幫幫我阿 2010年10月14日 上午 06:37
    2010年10月7日 上午 01:37
  • dear sir

    1.不好意思.請問您知道方案跟專案的不同嗎?

    2.若同一個方案中不同的專案或是不同類別,若要共同存取變數可以用靜態變數 static,可以不用new

        class AClass
        {
          public static string Test = "";
        }
        class BClass
        {
          void TestFun()
          {
            Console.WriteLine(AClass.Test);
          }
        }
    

    3.若不同方案中的資料存取,方法就很多了。

     

    2010年10月7日 上午 02:07
  • 你是同一個App Domain然後要讓兩個不同的執行個體通訊, 還是兩個App Domain (ex: 兩個不同的執行檔 ) ?

    實際上你的問題描述的很模糊, 用詞定義恐怕也有混淆.

    照你的發問軌跡來看, 你對物件導向的程式設計原理並不清楚, 建議你閱讀MSDN 文件庫中關於物件導向程式設計的介紹

    [物件導向程式設計 (C# 與 Visual Basic) ]

    或者你應該讀完這整個章節

    [程式設計概念 ]


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    2010年10月7日 上午 03:23
    版主