2012-10-23 2 views
-2

기본 클래스에서 파생 된 두 개의 클래스가있는 경우 두 클래스의 상속 된 속성을 조작 할 수있는 제네릭 메소드를 작성하는 방법을 사용하므로 두 개를 쓸 필요가 없습니다. 방법 ...기본 유형을 메소드로 전달

abstract class BaseClass 
{ 
    public int Id { get; set; } 
    public string slug { get; set; } 
} 

public class State:BaseClass 
{ 
    public string StateName{ get; set; } 
    public string Description { get; set; } 
} 

public class City:BaseClass 
{ 
    public string TownName { get; set; } 
    public string someOtherProperty{ get; set; } 

} 

은 "일반적인"방법 :

string a = Slugify(my_State_object); <--- not working 
string b = Slugify(my_City_object); <--- not working 

감사 Y :

public string Slugify(?????BaseClass???? record) 
{ 
    return record.slug = "...return...something..."; 
} 

같이 호출

우!

편집 : 주 및시는 EF-CodeFirst 클래스입니다. 처음에는 이드와 슬러그 필드가있었습니다.

그런 다음이 두 가지 (및 다른) 테이블에있는 기본 클래스로 만들었습니다. 나에게 "... 일부 무효를주고 모두 호출

Slugify(text, my_State_object); 

뿐만 아니라

Slugify(otherText, my_City_object); 

처럼라는

public string Slugify(string p, System.Data.Entity.DbSet<Models.BaseRecords> dbSet){ return ...} 

:

내가 좋아하는 슬러그를 반환하는 방법을 원한다 인수 ... "오류가 발생했습니다.

public string Slugify(BaseClass record) 
{ 
    return record.slug = "...return...something..."; 
} 

문제는 당신의 BaseClass로가 아이로 접근 할 수 있어야한다는 것입니다 :

죄송합니다,이 독일어 VS2010

+1

왜 매개 변수의 형식으로 BaseClass를 사용할 수 없습니까? –

+0

Slugify 메서드는 파생 클래스 속성에 대한 액세스가 필요합니까? 현재는 기본 클래스의 멤버이고 따라서 완전히 합법적 인 슬러그 만 액세스합니다. – MattDavey

+2

"작동하지 않음"을 정의하면 우리가 아마도 당신을 도울 수 있습니다. –

답변

6

에서 번역 당신은 이미 답을했다. 이 공개 그것은 잘 될 것입니다 : 당신의 abstract 기본 클래스는 공개하지 않고 그래서 그 아이보다 액세스 할 수 있기 때문에

public abstract class BaseClass ... 
+2

맞긴하지만 OP 코드에는 컴파일 타임 오류가 있어야합니다. 그들의 추상적 인 기본 클래스는 아이들보다 접근하기가 쉽지 않습니다. – keyboardP

3

그것입니다. 이것을 다음으로 변경하십시오 :

public abstract class BaseClass 
{ 
    public int Id { get; set; } 
    public string slug { get; set; } 
} 

나머지 코드는 정상입니다.

0

나는 슬러그를 생성하는 방법이 각 유형마다 다르다는 가정하에 있습니다. StateStateName 속성을 기반으로하고 CityTownName 속성을 사용합니다. 단순히의 base class의 속성에 액세스를 유지 무엇 ​​

public abstract class BaseClass 
{ 
    public int Id { get; set; } 
    public abstract string Slug { get; } 
} 

public class State:BaseClass 
{ 
    public string StateName{ get; set; } 
    public abstract string Slug 
    { 
     get 
     { 
      return Regex.Replace(StateName, '[^a-zA-Z0-9]', '-'); 
     } 
    } 
} 
0

:

내가이 더 나은 방법이 될 것 같아요?

Class A 
{ 
    public string Rawr {get; set;} 
} 

Class B : A 
{ 
    public string Rawr2 { get { return Rawr; } set { Rawr = value; } } 
} 

var b = new B(); 
b.Rawr = "asdf" 

Console.WriteLine(b.Rawr2); 
0

이 시도 :

public string Slugify(BaseClass record) 
{ 
    return record.slug = "...return...something..."; 
} 
:

BaseClass baseClass = new BaseClass(); 
baseClass.slug = "initial value"; 
Console.WriteLine(baseClass.slug); // displays "initial value" 
Slugify(baseClass); 
Console.WriteLine(baseClass.slug); // displays "...return...something..." 

State state = new State(); 
state.slug = "initial value"; 
Console.WriteLine(state.slug); // displays "initial value" 
Slugify(state); 
Console.WriteLine(state.slug); // displays "...return...something..." 

당신은 당신의 Slugify 방법은 이미 물음표를 제거 한 바와 같이 BaseClass로 및 주 클래스의 속성을 변경할 수 있음을 볼 수

관련 문제