나는 그들이 만든 미친 상황에서 누군가 인터페이스를 사용하려고 노력하고 있습니다. 그들은 목록에 관련이없는 여러 개의 객체가 있고 각 객체의 두 문자열 속성에 대한 연산을 수행해야합니다. 인터페이스의 일부로 프로퍼티를 정의하면 인터페이스 객체를 메서드 매개 변수의 유형으로 사용할 수 있습니다. 예를 들면 :일반 목록을 인터페이스/기본 클래스 유형 목록에 전송할 수 있습니까?
void PrintProperties(IEnumerable<ISpecialProperties> list)
{
foreach (var item in list)
{
Console.WriteLine("{0} {1}", item.Prop1, item.Prop2);
}
}
은 모든 좋은처럼이 보이지만에서 일해야하는 목록은 아니다 (그리고 안) 유형의 매개 변수로 인터페이스를 선언. 그러나 다른 유형 매개 변수로 형변환 할 수있는 것처럼 보이지는 않습니다. 예를 들어,이 실패하고 이유를 이해할 수 없다 :
using System;
using System.Collections.Generic;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
List<Test> myList = new List<Test>();
for (int i = 0; i < 5; i++)
{
myList.Add(new Test());
}
PrintList((IEnumerable<IDoSomething>)myList);
}
static void PrintList(IEnumerable<IDoSomething> list)
{
foreach (IDoSomething item in list)
{
item.DoSomething();
}
}
}
interface IDoSomething
{
void DoSomething();
}
public class Test : IDoSomething
{
public void DoSomething()
{
Console.WriteLine("Test did it!");
}
}
}
내가 이 작업을 수행 할 Enumerable.Cast<T>
멤버를 사용할 수 있지만, 나뿐만 아니라 .NET 2.0에서 작업 할 수있는 방법을 찾고 있었다. 이것이 가능해야하는 것처럼 보입니다. 나는 무엇을 놓치고 있습니까?
정확히 내가 작성한 것. –
나는 그것을 가로 질러 넘어졌고, 그것을 게시하려고오고 있었다. 이상하게 들릴 지 모르지만이 방법이 왜 그런지 이해할 수 있습니다. 유형을 캐스팅 할 수 있도록 지정해야합니다. – OwenP