Java 나 C#에서는 추상 클래스의 인스턴스를 만들 수 없습니다. 항상 추상 클래스에서 상속받은 구체적인 클래스를 만들어야합니다. Java를 사용하면 익명 클래스를 사용하여 클래스의 이름을 지정하지 않고도 작업을 수행 할 수 있습니다. C#은 그 옵션을 제공하지 않습니다.
당신이 추상 클래스를 사용할 때 자바에서 일반적으로
을 (.이 컴파일되지 않을 수도 있습니다 내가 여기 VS에 액세스 할 수없는, 그러나 이것은 아이디어 교환 등의 대리자를 보여 수정 됨) 단일 추상 메서드 (SAM) 당신이 실제로 달성하려고하는 것은 매개 변수로 일부 코드를 전달하는 것입니다. 컬렉션을 사용하여 클래스 이름을 기반으로 객체 배열을 정렬해야한다고 가정 해 보겠습니다.종류 (컬렉션, 비교기) 추가 입력을 방지하기 위해 익명 클래스를 사용 (나는 비교기는 인터페이스 알고 있지만,이 같은 생각입니다) , 당신은 C#을 2.0에서하고 넘어
Comparator<Object> comparator = new Comparator<Object>{
@Override
public int compare(Object o1, Objecto2) {
return o1.getClass().getSimpleName().compareTo(o2.getClass().getSimpleName()));
}//I'm not checking for null for simplicity
}
Collections.sort(list, comparator)
같은 것을 쓸 수 있습니다 Comparison<T>
대리자를 사용하면 거의 동일하게 처리 할 수 있습니다. 델리게이트는 함수 객체 또는 자바에서 단일 메소드를 가진 클래스로 생각할 수 있습니다. 클래스를 만들지 않아도되지만 delegate 키워드를 사용하는 메서드 만 만들면됩니다. C#을 3.0에서 당신은 람다 및 형식 유추를 사용하여 더 적은 코드를 작성할 수 있습니다 이상
Comparison<Object> comparison = delegate(Object o1, Object o2)
{
return o1.class.Name.CompareTo(o2.class.Name);
};
list.sort(comparison);
: 당신은 C#을에 코드 형태로 자바를 마이그레이션하는 경우
list.sort((o1, o2) => o1.class.Name.CompareTo(o2.class.Name))
어쨌든, 당신이 대표에 대해 읽어야 ... 대부분의 경우 익명 클래스 대신 대리자를 사용합니다. 귀하의 경우 void toDoSmth() 메소드를 사용하고 있습니다. 액션이라고하는 델리게이트가 있습니다. 이것은 매개 변수가없고 반환이없는 메소드와 거의 같습니다.
현재 귀하의 질문은 너무 멀리 있습니다. 특히 제목과 태그에서 추상 클래스를 언급했지만 텍스트 본문에서는 언급하지 않았습니다. 특정 Java 코드를 염두에 둔 경우 게시하십시오. –
그는 "Abstact"라는 수업을 언급했다. 관련성이있을 수 있습니다. –
아니요, Abstract 클래스는 abstract와 같습니다. – jitm