2015-07-13 228 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(); 
} 
相关问题