2015-07-13 86 views
2

我相信這是一個低級別的問題,但我無法找到這個問題的答案。我們可以在struct中實現多態嗎?

我認爲struct不支持多態性,但我的高級(在一次採訪中)說這是可能的。

有人可以告訴嗎?

+1

你能提供一些代碼?只是爲了爭辯你的帖子? –

回答

0

我認爲你的意思是運行時多態(方法重載)。我不認爲你可以用Structs做到這一點,因爲結構不支持繼承。

您可能要參考this articlethis article

+0

你的意思是運行時多態(方法重寫)。是否意味着我們可以做編譯時多態? – Vicky

+0

是的,我們可以做編譯時多態 – ViSu

0

我認爲我們可以做編譯時多態性但不是Runtime.I嘗試以下代碼,並讓我驚訝它的工作!

我試過的代碼和編譯時間多態性是允許的。代碼是在下面,但爲什麼運行時多態性是不允許的我沒有得到,但現在,我想我得到了解決方案。

任何意見或guidline表示讚賞。

using System; 
struct SimpleStruct 
{ 
    private int xval; 
    public int X 
    { 
     get 
     { 
      return xval; 
     } 
     set 
     { 
      if (value < 100) 
       xval = value; 
     } 
    } 
    public void DisplayX() 
    { 
     Console.WriteLine("The stored value is: {0}", xval); 
    } 
    public void DisplayX(int a) 
    { 

     Console.WriteLine("The stored value is: {0}", a); 
    } 
} 

class TestClass 
{ 
    public static void Main() 
    { 
     SimpleStruct ss = new SimpleStruct(); 
     ss.X = 5; 
     ss.DisplayX(); 
     ss.DisplayX(3); 
     Console.ReadLine(); 
    } 
} 
0

嗯,我想這樣一個事實:結構可以實現接口...

例如:

public interface IPoint 
{ 
    int X {get;set;} 
    int Y {get;set;} 
} 
public struct Point : IPoint 
{ 
    public int X { get; set; } 
    public int Y { get; set;} 
} 

public struct AnotherPoint : IPoint 
{ 
    public int X { get; set; } 
    public int Y { get; set; } 
} 

public static void Main() { 
    var arr = new IPoint [2]; 
    arr [0] = new Point() { X = 2 }; 
    arr [1] = new AnotherPoint() { X = 7 }; 

    foreach (var p in arr) { 
     Console.WriteLine (p.X); 
    } 
    Console.ReadKey(); 
} 
相關問題