Przeładowanie operatora () jak w C++

0

Cześć, załóżmy, że mam taką klasę:

 
public class MyClass
{
  private int m_value;
  public int Value
  {
    get {return m_value;}
  }
}

Gdybym w C++ przeładował operator () dla takiej klasy, mógłbym napisać:

 
MyClass myObj;
int a = myObj();

zamiast(pseudokod):

 
MyClass myObj;
int a = myObj.Value;

Czy mogę coś takiego zrobić w C#? Tzn. zamiast odnosić się do konkretnego składnika obiektu, podać sam obiekt?

0

Co chcesz konkretnie osiagnac i dlaczego chcesz to robic w tak brutalny sposob?

Operator () w C# nie moze byc przeciazony.

2

Sama ta klasa jest bez sensu, bo w C# są akcesory domyślne:

public class MyClass
{
  public int Value { get; set; }
}

albo - jeśli zapis ma być ograniczony, to np.

public class MyClass
{
  public int Value { get; protected set; }
}

Poza tym, jeśli wartość ma być generowana na żądanie - i z założenia za każdym razem inna, lepiej zrobić funkcję, a nie właściwość.
Przykładem jest funkcja a nie właściwość int Random.Next().

0
Juhas napisał(a):

Czy mogę coś takiego zrobić w C#? Tzn. zamiast odnosić się do konkretnego składnika obiektu, podać sam obiekt?

Czyli chcesz skonwertować obiekt jednego typu na inny bez jawnego podawania typu docelowego?
http://msdn.microsoft.com/en-us/library/z5z9kes2.aspx

0

Inaczej. Zamiast pisać:
myObj.Value
chciałbym móc napisać:
myObj()

0

No to się nie da. Ale możesz

myObj.Value()

jak koniecznie mają być nawiasy.

0

Nie chodzi o nawiasy, tylko o skrót zapisu ;) Niestety wygląda na to, że w C# się tego nie da zrobić.

0

Nie każdy mechanizm z jednego języka ma dokładne przełożenie na drugi.
Gdyby tak było, to byłby tylko jeden język ;-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1